Packages
doex
0.11.0
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/parser.ex
defmodule Doex.Cli.Parser do
use FnExpr
def parse(raw_args), do: parse(raw_args, nil)
def parse(raw_args, nil), do: _parse(raw_args, %{}, switches: [], allow_nonexistent_atoms: true)
def parse(raw_args, switches),
do: _parse(raw_args, switches, switches: switches |> Map.to_list())
defp _parse(raw_args, switches, parse_opts) do
{opts, args, _} = OptionParser.parse(raw_args, parse_opts)
config = Doex.Config.read()
switches
|> Enum.map(fn {name, type} -> {name, defaulted(config, name, type)} end)
|> Enum.into(%{})
|> Map.merge(opts |> Enum.into(%{}))
|> Enum.map(fn {k, v} ->
case switches[k] do
:list -> {k, to_list(v)}
_ -> {k, v}
end
end)
|> Enum.into(%{})
|> invoke({&1, args})
end
defp defaulted(config, name, type), do: config[name] || defaulted(type)
defp defaulted(:boolean), do: false
defp defaulted(:string), do: nil
defp defaulted(:list), do: []
defp defaulted(:integer), do: 0
defp to_list(nil), do: []
defp to_list(l) when is_list(l), do: l
defp to_list(v) when is_binary(v), do: String.split(v, ",")
end