diff --git a/lib/vultr.ex b/lib/vultr.ex
index fa3db60..c1b817a 100644
--- a/lib/vultr.ex
+++ b/lib/vultr.ex
@@ -1,26 +1,12 @@
defmodule Vultr do
- use Tesla, docs: false
- use Vultr.Request
-
- plug Tesla.Middleware.BaseUrl, "https://api.vultr.com/v1"
- plug Tesla.Middleware.FormUrlencoded
- plug Tesla.Middleware.DecodeJson
-
- adapter :ibrowse
-
- @doc """
- Create a Vultr client with an API-Key for authenticated methods
- """
- def client(api_key) do
- Tesla.build_client [
- {Tesla.Middleware.Headers, %{ "API-Key" => api_key }}
- ]
- end
+ use Vultr.Request, [
+ base_url: "https://api.vultr.com/",
+ ]
##################################################
# Account
- request :get, "account/info", [
+ request :get, "v1", "account/info", [
desc: """
Retrieve information about the current account.
""",
@@ -31,7 +17,7 @@ defmodule Vultr do
##################################################
# Application
- request :get, "app/list", [
+ request :get, "v1", "app/list", [
desc: """
Retrieve a list of available applications.
@@ -42,7 +28,7 @@ defmodule Vultr do
##################################################
# API Key
- request :get, "auth/info", [
+ request :get, "v1", "auth/info", [
desc: """
Retrieve information about the current API key.
""",
@@ -52,7 +38,7 @@ defmodule Vultr do
##################################################
# Backup
- request :get, "backup/list", [
+ request :get, "v1", "backup/list", [
desc: """
List all backups on the current account.
""",
@@ -73,7 +59,7 @@ defmodule Vultr do
##################################################
# Block Storage
- request :post, "block/attach", [
+ request :post, "v1", "block/attach", [
desc: """
Attach a block storage subscription to a VPS subscription.
@@ -97,7 +83,7 @@ defmodule Vultr do
},
]
- request :post, "block/create", [
+ request :post, "v1", "block/create", [
desc: """
Create a block storage subscription.
""",
@@ -127,7 +113,7 @@ defmodule Vultr do
},
]
- request :post, "block/delete", [
+ request :post, "v1", "block/delete", [
desc: """
Delete a block storage subscription.
@@ -146,7 +132,7 @@ defmodule Vultr do
},
]
- request :post, "block/detach", [
+ request :post, "v1", "block/detach", [
desc: """
Detach a block storage subscription from the currently attached instance.
""",
@@ -162,7 +148,7 @@ defmodule Vultr do
},
]
- request :post, "block/label_set", [
+ request :post, "v1", "block/label_set", [
desc: """
Set the label of a block storage subscription.
""",
@@ -184,7 +170,7 @@ defmodule Vultr do
},
]
- request :get, "block/list", [
+ request :get, "v1", "block/list", [
desc: """
Retrieve a list of any active block storage subscriptions on this account.
""",
@@ -202,7 +188,7 @@ defmodule Vultr do
},
]
- request :post, "block/resize", [
+ request :post, "v1", "block/resize", [
desc: """
Resize the block storage volume to a new size.
@@ -229,7 +215,7 @@ defmodule Vultr do
##################################################
# DNS
- request :post, "dns/create_domain", [
+ request :post, "v1", "dns/create_domain", [
desc: """
Create a domain name in DNS.
""",
@@ -251,7 +237,7 @@ defmodule Vultr do
},
]
- request :post, "dns/create_record", [
+ request :post, "v1", "dns/create_record", [
desc: """
Add a DNS record.
""",
@@ -298,7 +284,7 @@ defmodule Vultr do
},
]
- request :post, "dns/delete_domain", [
+ request :post, "v1", "dns/delete_domain", [
desc: """
Delete a domain name and all associated records.
""",
@@ -314,7 +300,7 @@ defmodule Vultr do
},
]
- request :post, "dns/delete_record", [
+ request :post, "v1", "dns/delete_record", [
desc: """
Delete an individual DNS record.
""",
@@ -337,7 +323,7 @@ defmodule Vultr do
},
]
- request :get, "dns/list", [
+ request :get, "v1", "dns/list", [
desc: """
List all domains associated with the current account.
""",
@@ -345,7 +331,7 @@ defmodule Vultr do
required_access: :dns,
]
- request :get, "dns/records", [
+ request :get, "v1", "dns/records", [
desc: """
List all the records associated with a particular domain.
""",
@@ -361,7 +347,7 @@ defmodule Vultr do
},
]
- request :post, "dns/update_record", [
+ request :post, "v1", "dns/update_record", [
desc: """
Update a DNS record.
""",
@@ -415,7 +401,7 @@ defmodule Vultr do
##################################################
# ISO Image
- request :get, "iso/list", [
+ request :get, "v1", "iso/list", [
desc: """
List all ISOs currently available on this account.
""",
@@ -426,7 +412,7 @@ defmodule Vultr do
##################################################
# Operating System
- request :get, "os/list", [
+ request :get, "v1", "os/list", [
desc: """
Retrieve a list of available operating systems.
@@ -437,7 +423,7 @@ defmodule Vultr do
##################################################
# Plans
- request :get, "plans/list", [
+ request :get, "v1", "plans/list", [
desc: """
Retrieve a list of all active plans. Plans that are no longer available will not be shown.
@@ -460,7 +446,7 @@ defmodule Vultr do
},
]
- request :get, "plans/list_vc2", [
+ request :get, "v1", "plans/list_vc2", [
desc: """
Retrieve a list of all active vc2 plans. Plans that are no longer available will not be shown.
@@ -470,7 +456,7 @@ defmodule Vultr do
""",
]
- request :get, "plans/list_vdc2", [
+ request :get, "v1", "plans/list_vdc2", [
desc: """
Retrieve a list of all active vdc2 plans. Plans that are no longer available will not be shown.
@@ -483,7 +469,7 @@ defmodule Vultr do
##################################################
# Regions
- request :get, "regions/availability", [
+ request :get, "v1", "regions/availability", [
desc: """
Retrieve a list of the `VPSPLANID`s currently available in this location.
@@ -501,7 +487,7 @@ defmodule Vultr do
},
]
- request :get, "regions/list", [
+ request :get, "v1", "regions/list", [
desc: """
Retrieve a list of all active regions.
@@ -512,7 +498,7 @@ defmodule Vultr do
##################################################
# Reserved IP
- request :post, "reservedip/attach", [
+ request :post, "v1", "reservedip/attach", [
desc: """
Attach a reserved IP to an existing subscription.
""",
@@ -534,7 +520,7 @@ defmodule Vultr do
},
]
- request :post, "reservedip/convert", [
+ request :post, "v1", "reservedip/convert", [
desc: """
Convert an existing IP on a subscription to a reserved IP.
@@ -565,7 +551,7 @@ defmodule Vultr do
},
]
- request :post, "reservedip/create", [
+ request :post, "v1", "reservedip/create", [
desc: """
Create a new reserved IP.
@@ -598,7 +584,7 @@ defmodule Vultr do
},
]
- request :post, "reservedip/destroy", [
+ request :post, "v1", "reservedip/destroy", [
desc: """
Remove a reserved IP from your account.
@@ -616,7 +602,7 @@ defmodule Vultr do
},
]
- request :post, "reservedip/detach", [
+ request :post, "v1", "reservedip/detach", [
desc: """
Detach a reserved IP from an existing subscription.
""",
@@ -638,7 +624,7 @@ defmodule Vultr do
},
]
- request :get, "reservedip/list", [
+ request :get, "v1", "reservedip/list", [
desc: """
List all the active reserved IPs on this account.
@@ -652,7 +638,7 @@ defmodule Vultr do
##################################################
# Server
- request :post, "server/app_change", [
+ request :post, "v1", "server/app_change", [
desc: """
Changes the virtual machine to a different application.
@@ -678,7 +664,7 @@ defmodule Vultr do
},
]
- request :get, "server/app_change_list", [
+ request :get, "v1", "server/app_change_list", [
desc: """
Retrieves a list of applications to which a virtual machine can be changed.
@@ -697,7 +683,7 @@ defmodule Vultr do
},
]
- request :post, "server/backup_disable", [
+ request :post, "v1", "server/backup_disable", [
desc: """
Disables automatic backups on a server.
@@ -716,7 +702,7 @@ defmodule Vultr do
},
]
- request :post, "server/backup_enable", [
+ request :post, "v1", "server/backup_enable", [
desc: """
Enables automatic backups on a server.
""",
@@ -733,7 +719,7 @@ defmodule Vultr do
},
]
- request :post, "server/backup_get_schedule", [
+ request :post, "v1", "server/backup_get_schedule", [
desc: """
Retrieves the backup schedule for a server.
@@ -752,7 +738,7 @@ defmodule Vultr do
},
]
- request :post, "server/backup_set_schedule", [
+ request :post, "v1", "server/backup_set_schedule", [
desc: """
Sets the backup schedule for a server.
@@ -802,7 +788,7 @@ defmodule Vultr do
},
]
- request :get, "server/bandwidth", [
+ request :get, "v1", "server/bandwidth", [
desc: """
Get the bandwidth used by a virtual machine.
""",
@@ -819,7 +805,7 @@ defmodule Vultr do
},
]
- request :post, "server/create", [
+ request :post, "v1", "server/create", [
desc: """
Create a new virtual machine.
@@ -973,7 +959,7 @@ defmodule Vultr do
},
]
- request :post, "server/create_ipv4", [
+ request :post, "v1", "server/create_ipv4", [
desc: """
Add a new IPv4 address to a server.
@@ -1002,7 +988,7 @@ defmodule Vultr do
},
]
- request :post, "server/destroy", [
+ request :post, "v1", "server/destroy", [
desc: """
Destroy (delete) a virtual machine.
@@ -1022,7 +1008,7 @@ defmodule Vultr do
},
]
- request :post, "server/destroy_ipv4", [
+ request :post, "v1", "server/destroy_ipv4", [
desc: """
Removes a secondary IPv4 address from a server.
@@ -1042,7 +1028,7 @@ defmodule Vultr do
},
]
- request :get, "server/get_app_info", [
+ request :get, "v1", "server/get_app_info", [
desc: """
Retrieves the application information for this subscription.
""",
@@ -1059,7 +1045,7 @@ defmodule Vultr do
},
]
- request :get, "server/get_user_data", [
+ request :get, "v1", "server/get_user_data", [
desc: """
Retrieves the (base64 encoded) user-data for this subscription.
""",
@@ -1076,7 +1062,7 @@ defmodule Vultr do
},
]
- request :post, "server/halt", [
+ request :post, "v1", "server/halt", [
desc: """
Halt a virtual machine. This is a hard power off (basically, unplugging the machine).
@@ -1096,7 +1082,7 @@ defmodule Vultr do
},
]
- request :post, "server/iso_attach", [
+ request :post, "v1", "server/iso_attach", [
desc: """
Attach an ISO and reboot the server.
""",
@@ -1120,7 +1106,7 @@ defmodule Vultr do
},
]
- request :post, "server/iso_detach", [
+ request :post, "v1", "server/iso_detach", [
desc: """
Detach the currently mounted ISO and reboot the server.
""",
@@ -1137,7 +1123,7 @@ defmodule Vultr do
},
]
- request :get, "server/iso_status", [
+ request :get, "v1", "server/iso_status", [
desc: """
Retrieve the current ISO state for a given subscription.
@@ -1157,7 +1143,7 @@ defmodule Vultr do
},
]
- request :post, "server/label_set", [
+ request :post, "v1", "server/label_set", [
desc: """
Set the label of a virtual machine.
""",
@@ -1180,7 +1166,7 @@ defmodule Vultr do
},
]
- request :get, "server/list", [
+ request :get, "v1", "server/list", [
desc: """
List all active or pending virtual machines on the current account.
@@ -1232,7 +1218,7 @@ defmodule Vultr do
},
]
- request :get, "server/list_ipv4", [
+ request :get, "v1", "server/list_ipv4", [
desc: """
List the IPv4 information of a virtual machine.
@@ -1242,7 +1228,7 @@ defmodule Vultr do
required_access: :subscriptions,
]
- request :get, "server/list_ipv6", [
+ request :get, "v1", "server/list_ipv6", [
desc: """
List the IPv6 information of a virtual machine.
@@ -1253,7 +1239,7 @@ defmodule Vultr do
required_access: :subscriptions,
]
- request :get, "server/neighbors", [
+ request :get, "v1", "server/neighbors", [
desc: """
Determine what other subscriptions are hosted on the same physical host as a given subscription.
""",
@@ -1270,7 +1256,7 @@ defmodule Vultr do
},
]
- request :post, "server/os_change", [
+ request :post, "v1", "server/os_change", [
desc: """
Changes the virtual machine to a different operating system.
@@ -1296,7 +1282,7 @@ defmodule Vultr do
},
]
- request :get, "server/os_change_list", [
+ request :get, "v1", "server/os_change_list", [
desc: """
Retrieves a list of operating systems to which a virtual machine can be changed.
@@ -1316,7 +1302,7 @@ defmodule Vultr do
},
]
- request :post, "server/reboot", [
+ request :post, "v1", "server/reboot", [
desc: """
Reboot a virtual machine.
@@ -1335,7 +1321,7 @@ defmodule Vultr do
},
]
- request :post, "server/reinstall", [
+ request :post, "v1", "server/reinstall", [
desc: """
Reinstall the operating system on a virtual machine.
@@ -1362,7 +1348,7 @@ defmodule Vultr do
},
]
- request :post, "server/restore_backup", [
+ request :post, "v1", "server/restore_backup", [
desc: """
Restore the specified backup to the virtual machine.
@@ -1388,7 +1374,7 @@ defmodule Vultr do
},
]
- request :post, "server/restore_snapshot", [
+ request :post, "v1", "server/restore_snapshot", [
desc: """
Restore the specified snapshot to the virtual machine.
@@ -1414,7 +1400,7 @@ defmodule Vultr do
},
]
- request :post, "server/reverse_default_ipv4", [
+ request :post, "v1", "server/reverse_default_ipv4", [
desc: """
Set a reverse DNS entry for an IPv4 address of a virtual machine to the original setting.
@@ -1440,7 +1426,7 @@ defmodule Vultr do
},
]
- request :post, "server/reverse_delete_ipv6", [
+ request :post, "v1", "server/reverse_delete_ipv6", [
desc: """
Remove a reverse DNS entry for an IPv6 address of a virtual machine.
@@ -1466,7 +1452,7 @@ defmodule Vultr do
},
]
- request :get, "server/reverse_list_ipv6", [
+ request :get, "v1", "server/reverse_list_ipv6", [
desc: """
List the IPv6 reverse DNS entries of a virtual machine.
@@ -1486,7 +1472,7 @@ defmodule Vultr do
},
]
- request :post, "server/reverse_set_ipv4", [
+ request :post, "v1", "server/reverse_set_ipv4", [
desc: """
Set a reverse DNS entry for an IPv4 address of a virtual machine.
@@ -1518,7 +1504,7 @@ defmodule Vultr do
},
]
- request :post, "server/reverse_set_ipv6", [
+ request :post, "v1", "server/reverse_set_ipv6", [
desc: """
Set a reverse DNS entry for an IPv6 address of a virtual machine.
@@ -1550,7 +1536,7 @@ defmodule Vultr do
},
]
- request :post, "server/set_user_data", [
+ request :post, "v1", "server/set_user_data", [
desc: """
Sets the cloud-init user-data for this subscription.
@@ -1575,7 +1561,7 @@ defmodule Vultr do
},
]
- request :post, "server/start", [
+ request :post, "v1", "server/start", [
desc: """
Start a virtual machine.
@@ -1594,7 +1580,7 @@ defmodule Vultr do
},
]
- request :post, "server/upgrade_plan", [
+ request :post, "v1", "server/upgrade_plan", [
desc: """
Upgrade the plan of a virtual machine.
@@ -1620,7 +1606,7 @@ defmodule Vultr do
},
]
- request :post, "server/upgrade_plan_list", [
+ request :post, "v1", "server/upgrade_plan_list", [
desc: """
Retrieve a list of the VPSPLANIDs for which a virtual machine can be upgraded.
@@ -1642,7 +1628,7 @@ defmodule Vultr do
##################################################
# Snapshot
- request :post, "snapshot/create", [
+ request :post, "v1", "snapshot/create", [
desc: """
Create a snapshot from an existing virtual machine.
@@ -1668,7 +1654,7 @@ defmodule Vultr do
},
]
- request :post, "snapshot/destroy", [
+ request :post, "v1", "snapshot/destroy", [
desc: """
Destroy (delete) a snapshot.
@@ -1687,7 +1673,7 @@ defmodule Vultr do
},
]
- request :get, "snapshot/list", [
+ request :get, "v1", "snapshot/list", [
desc: """
List all snapshots on the current account.
""",
@@ -1698,7 +1684,7 @@ defmodule Vultr do
##################################################
# SSH Key
- request :post, "sshkey/create", [
+ request :post, "v1", "sshkey/create", [
desc: """
Create a new SSH Key.
""",
@@ -1720,7 +1706,7 @@ defmodule Vultr do
},
]
- request :post, "sshkey/destroy", [
+ request :post, "v1", "sshkey/destroy", [
desc: """
Remove a SSH key.
@@ -1739,7 +1725,7 @@ defmodule Vultr do
},
]
- request :get, "sshkey/list", [
+ request :get, "v1", "sshkey/list", [
desc: """
List all the SSH keys on the current account.
""",
@@ -1747,7 +1733,7 @@ defmodule Vultr do
required_access: :subscriptions,
]
- request :post, "sshkey/update", [
+ request :post, "v1", "sshkey/update", [
desc: """
Update an existing SSH Key.
@@ -1784,7 +1770,7 @@ defmodule Vultr do
##################################################
# Startup Script
- request :post, "startupscript/create", [
+ request :post, "v1", "startupscript/create", [
desc: """
Create a startup script.
""",
@@ -1814,7 +1800,7 @@ defmodule Vultr do
},
]
- request :post, "startupscript/destroy", [
+ request :post, "v1", "startupscript/destroy", [
desc: """
Remove a startup script.
""",
@@ -1830,7 +1816,7 @@ defmodule Vultr do
},
]
- request :get, "startupscript/list", [
+ request :get, "v1", "startupscript/list", [
desc: """
List all startup scripts on the current account.
@@ -1841,7 +1827,7 @@ defmodule Vultr do
required_access: :subscriptions,
]
- request :post, "startupscript/update", [
+ request :post, "v1", "startupscript/update", [
desc: """
Update an existing startup script.
""",
@@ -1875,7 +1861,7 @@ defmodule Vultr do
##################################################
# User Management
- request :post, "user/create", [
+ request :post, "v1", "user/create", [
desc: """
Create a new user.
""",
@@ -1916,7 +1902,7 @@ defmodule Vultr do
},
]
- request :post, "user/delete", [
+ request :post, "v1", "user/delete", [
desc: """
Delete a user.
""",
@@ -1932,7 +1918,7 @@ defmodule Vultr do
},
]
- request :get, "user/list", [
+ request :get, "v1", "user/list", [
desc: """
Retrieve a list of any users associated with this account.
@@ -1951,7 +1937,7 @@ defmodule Vultr do
required_access: :manage_users,
]
- request :post, "user/update", [
+ request :post, "v1", "user/update", [
desc: """
Update the details for a user.
""",
diff --git a/lib/vultr/request.ex b/lib/vultr/request.ex
index 5579823..2295153 100644
--- a/lib/vultr/request.ex
+++ b/lib/vultr/request.ex
@@ -6,22 +6,32 @@ defmodule Vultr.Request do
:isoid, :scriptid, :snapshotid, :sshkeyid, :backupid, :userid,
]
- defmacro __using__(_) do
+ defmacro __using__(options) do
+ module = __CALLER__.module
+
+ Module.register_attribute(module, :__request_opts__, persist: true)
+ Module.put_attribute(module, :__request_opts__, options)
+
quote do
- import Vultr.Request, only: [request: 3]
+ import Vultr.Request, only: [request: 4]
end
end
- defmacro request(endpoint_method, endpoint_path, endpoint_opts) do
+ defmacro request(endpoint_method, endpoint_version, endpoint_path, endpoint_opts) do
+ request_opts = Module.get_attribute(__CALLER__.module, :__request_opts__)
+ base_url = Keyword.fetch!(request_opts, :base_url)
+
endpoint_params = Keyword.get(endpoint_opts, :params, {nil, nil, []}) |> normalize_params
+ endpoint_versioned_path = Path.join([endpoint_version, endpoint_path])
+ endpoint_url = URI.merge(base_url, endpoint_versioned_path) |> to_string
endpoint_description = Keyword.fetch!(endpoint_opts, :desc)
endpoint_requires_api_key = Keyword.get(endpoint_opts, :api_key, nil)
endpoint_required_access = Keyword.get(endpoint_opts, :required_access, nil)
endpoint_has_params = (length(endpoint_params) > 0)
- common_args = [__CALLER__.module, endpoint_method, endpoint_path]
+ common_args = [endpoint_method, endpoint_url]
- func = &__MODULE__.perform_request/5
+ func = &__MODULE__.perform_request/4
func_name =
endpoint_path
@@ -29,7 +39,7 @@ defmodule Vultr.Request do
|> String.to_atom
func_doc = gen_doc(
- endpoint_method, endpoint_path,
+ endpoint_method, endpoint_versioned_path,
endpoint_description, endpoint_params,
endpoint_required_access, endpoint_requires_api_key
)
@@ -38,14 +48,14 @@ defmodule Vultr.Request do
cond do
endpoint_requires_api_key && endpoint_has_params ->
quote do
- def unquote(func_name)(client, params \\ []) when is_list(params) do
- unquote(func).(unquote_splicing(common_args), client, params)
+ def unquote(func_name)(api_key, params \\ []) when is_list(params) do
+ unquote(func).(unquote_splicing(common_args), api_key, params)
end
end
endpoint_requires_api_key ->
quote do
- def unquote(func_name)(client) do
- unquote(func).(unquote_splicing(common_args), client, [])
+ def unquote(func_name)(api_key) do
+ unquote(func).(unquote_splicing(common_args), api_key, [])
end
end
endpoint_has_params ->
@@ -68,24 +78,43 @@ defmodule Vultr.Request do
end
end
- def perform_request(caller, method, url, client, params) do
- opts = [url: url, method: method] ++ prepare_params(method, params)
- resp = Tesla.perform_request(caller, client, opts)
- case resp.status do
- 200 -> {:ok, resp.body}
- 400 -> {:error, :invalid_api_location, resp.body}
- 403 -> {:error, :invalid_api_key, resp.body}
- 405 -> {:error, :invalid_http_method, resp.body}
- 412 -> {:error, :bad_request, resp.body}
- 500 -> {:error, :server_error, resp.body}
- 503 -> {:error, :rate_limit, resp.body}
+ def perform_request(method, url, api_key, params) do
+ headers = prepare_api_key_header(api_key)
+ opts = [headers: headers] ++ prepare_params(method, params)
+ resp = HTTPotion.request(method, url, opts)
+ parsed_body = parse_body(resp)
+
+ case resp.status_code do
+ 200 -> {:ok, parsed_body}
+ 400 -> {:error, :invalid_api_location, parsed_body}
+ 403 -> {:error, :invalid_api_key, parsed_body}
+ 405 -> {:error, :invalid_http_method, parsed_body}
+ 412 -> {:error, :bad_request, parsed_body}
+ 500 -> {:error, :server_error, parsed_body}
+ 503 -> {:error, :rate_limit, parsed_body}
end
end
- defp prepare_params(:get, nil), do: [query: []]
- defp prepare_params(_, nil), do: [body: %{}]
- defp prepare_params(:get, params), do: [query: capitalize_special_params(params)]
- defp prepare_params(_, params), do: [body: Enum.into(capitalize_special_params(params), %{})]
+ defp parse_body(%HTTPotion.Response{ body: body, headers: headers }) do
+ case HTTPotion.Headers.fetch(headers, "content-type") do
+ {:ok, "application/json"} ->
+ Poison.decode!(body)
+ _ ->
+ body
+ end
+ end
+
+ defp prepare_api_key_header(nil), do: []
+ defp prepare_api_key_header(api_key), do: ["API-Key": api_key]
+
+ defp prepare_params(:get, params), do: [query: prepare_query(params)]
+ defp prepare_params(_, params), do: [body: prepare_body(params)]
+
+ defp prepare_body(nil), do: ""
+ defp prepare_body(params), do: capitalize_special_params(params) |> Enum.into(%{}) |> Poison.encode!
+
+ defp prepare_query(nil), do: false
+ defp prepare_query(params), do: capitalize_special_params(params)
defp capitalize_special_params(params) do
Enum.map(params, fn {k, v} ->
@@ -122,36 +151,42 @@ defmodule Vultr.Request do
# Documentation helpers
defp gen_doc(method, path, desc, params, required_access, api_key) do
- doc = """
- #{desc}
"""
-
- doc =
- if length(params) > 0 do
- doc <> ("""
- ### Params
- | Name | Type | Optional | Description |
- | ---- | ---- | -------- | ----------- |
- #{doc_params(params)}
- """)
- else
- doc
- end
-
- doc <> """
+ #{desc}
+ #{doc_params(params)}
### Backend
- Method: `#{doc_method(method)}`
- - Path: `/v1/#{path}`
+ - Path: `#{path}`
- API Key: `#{doc_api_key(api_key)}`
- Required Access: `#{doc_required_access(required_access)}`
"""
end
- defp doc_param(param), do: """
- | `#{String.downcase(param.name)}` | #{param.type_string} | #{doc_optional_default(param.optional, param.default)} | #{param.desc |> String.replace("\n", "
")} |
- """
+ defp doc_params([]), do: ""
+ defp doc_params(params) do
+ param_rows =
+ params
+ |> Enum.map(&doc_param/1)
+ |> Enum.join("")
- defp doc_params(params), do: params |> Enum.map(&doc_param/1) |> Enum.join("")
+ """
+ ### Params
+ | Name | Type | Optional | Description |
+ | ---- | ---- | -------- | ----------- |
+ #{param_rows}
+ """
+ end
+
+ defp doc_param(param) do
+ columns = [
+ "`#{String.downcase(param.name)}`",
+ param.type_string,
+ doc_optional_default(param.optional, param.default),
+ String.replace(param.desc, "\n", "
"),
+ ]
+
+ "| #{Enum.join(columns, " | ")} |"
+ end
defp doc_optional_default(optional, default) do
if optional do
@@ -167,13 +202,7 @@ defmodule Vultr.Request do
end
end
- defp doc_method(method) do
- if !Enum.any?([:get, :post], fn supported -> method == supported end) do
- raise ArgumentError, message: "Bad method"
- end
-
- method |> Atom.to_string |> String.upcase
- end
+ defp doc_method(method), do: method |> Atom.to_string |> String.upcase
defp doc_api_key(nil), do: "No"
defp doc_api_key(atm), do: atom_to_word(atm)
diff --git a/mix.exs b/mix.exs
index f2331af..30bedcb 100644
--- a/mix.exs
+++ b/mix.exs
@@ -16,14 +16,13 @@ defmodule Vultr.Mixfile do
# Configuration for the OTP application
def application, do: [
- applications: [:tesla, :ibrowse],
+ applications: [:httpotion],
]
defp deps, do: [
{:inch_ex, "~> 0.5", only: :docs},
{:ex_doc, "~> 0.16", only: :dev, runtime: false},
- {:tesla, "~> 0.7.2"},
- {:ibrowse, "~> 4.2"},
+ {:httpotion, "~> 3.0.2"},
{:poison, "~> 3.1"},
]
diff --git a/mix.lock b/mix.lock
index a3bba3d..a116563 100644
--- a/mix.lock
+++ b/mix.lock
@@ -1,12 +1,6 @@
-%{"certifi": {:hex, :certifi, "1.0.0", "1c787a85b1855ba354f0b8920392c19aa1d06b0ee1362f9141279620a5be2039", [:rebar3], []},
- "earmark": {:hex, :earmark, "1.2.3", "206eb2e2ac1a794aa5256f3982de7a76bf4579ff91cb28d0e17ea2c9491e46a4", [:mix], []},
+%{"earmark": {:hex, :earmark, "1.2.3", "206eb2e2ac1a794aa5256f3982de7a76bf4579ff91cb28d0e17ea2c9491e46a4", [:mix], []},
"ex_doc": {:hex, :ex_doc, "0.16.3", "cd2a4cfe5d26e37502d3ec776702c72efa1adfa24ed9ce723bb565f4c30bd31a", [:mix], [{:earmark, "~> 1.1", [hex: :earmark, optional: false]}]},
- "hackney": {:hex, :hackney, "1.6.6", "5564b4695d48fd87859e9df77a7fa4b4d284d24519f0cd7cc898f09e8fbdc8a3", [:rebar3], [{:certifi, "1.0.0", [hex: :certifi, optional: false]}, {:idna, "4.0.0", [hex: :idna, optional: false]}, {:metrics, "1.0.1", [hex: :metrics, optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, optional: false]}]},
+ "httpotion": {:hex, :httpotion, "3.0.3", "17096ea1a7c0b2df74509e9c15a82b670d66fc4d66e6ef584189f63a9759428d", [], [{:ibrowse, "~> 4.4", [hex: :ibrowse, repo: "hexpm", optional: false]}], "hexpm"},
"ibrowse": {:hex, :ibrowse, "4.4.0", "2d923325efe0d2cb09b9c6a047b2835a5eda69d8a47ed6ff8bc03628b764e991", [:rebar3], []},
- "idna": {:hex, :idna, "4.0.0", "10aaa9f79d0b12cf0def53038547855b91144f1bfcc0ec73494f38bb7b9c4961", [:rebar3], []},
"inch_ex": {:hex, :inch_ex, "0.5.6", "418357418a553baa6d04eccd1b44171936817db61f4c0840112b420b8e378e67", [:mix], [{:poison, "~> 1.5 or ~> 2.0 or ~> 3.0", [hex: :poison, optional: false]}]},
- "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], []},
- "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], []},
- "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], []},
- "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], []},
- "tesla": {:hex, :tesla, "0.7.2", "29290de334f1064e98c32d0ba5e73674fdbe53c17f8af7bcc686bf5002a30bab", [:mix], [{:exjsx, ">= 0.1.0", [hex: :exjsx, optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, optional: true]}, {:ibrowse, "~> 4.2", [hex: :ibrowse, optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, optional: true]}]}}
+ "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], []}}