Packages
doex
0.7.4
0.14.1
0.12.2
0.12.1
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.1
A Digital Ocean API v2 client for Elixir (yes, another one)
Current section
Files
Jump to
Current section
Files
lib/doex/cli/get.ex
defmodule Doex.Cli.Get do
use FnExpr
alias Doex.Cli.Parser
alias Doex.Io.Shell
@moduledoc"""
Execute a Digital Ocean API GET request
doex get <path>
For example
doex get /account/keys
The output will be similar to the following, and it's the IDs you want.
{:ok,
%{"links" => %{}, "meta" => %{"total" => 2},
"ssh_keys" => [%{"fingerprint" => "18:19:20:21:22:23:24:25:26:27:28:29:30:31:32:33",
"id" => 555213, "name" => "mbp",
"public_key" => "ssh-dss ABC123"},
%{"fingerprint" => "19:20:21:22:23:24:25:26:27:28:29:30:31:32:33:34",
"id" => 555214, "name" => "andrew13mbp",
"public_key" => "ssh-rsa DEF456"}]}}
Query parameters are added as options, for example
doex get /images --page 1 --per-page 1 --private
Note that `per_page` DO parameter is changed to dash case `per-page`
and boolean parameters, for example `private`, if present are
defaulted to be `true` (to force false, use `--<param> false`)
"""
def run(raw_args) do
Doex.start
raw_args
|> Parser.parse()
|> invoke(fn {opts, [endpoint]} ->
opts
|> Enum.map(fn {k,v} -> "#{k}=#{v}" end)
|> Enum.join("&")
|> invoke("#{endpoint}?#{&1}")
|> String.replace(~r{\?$},"")
end)
|> Doex.Api.get
|> Shell.inspect(raw_args)
end
end