Arguments parses command line arguments with a declarative, simple setup
Produces results as a map for super pattern matching argument handling in your app!
$ cmd new myname --more
into
%{new: true, name: "myname", more: true}
Documentation: https://hexdocs.pm/arguments/
Add arguments
to your list of dependencies in mix.exs
:
def deps do
[{:arguments, "~> 0.1.0"}]
end
Arguments provides a module with argument parsing through YourArguments.parse(incoming)
use Arguments
There are two styles of arguments allowed
These two styles can be mixed, but the flags will always take priority
module MyArguments do
use Arguments
command "new", do: [
arguments: [:name, :dir]
]
flag "name", do: [
type: :string,
alias: :n,
defaults: fn (n) -> [
dir: "./#\{n\}"
] end
]
flag "more", do: %{
type: :boolean,
alias: :m
}
flag "more_defaults", do: %{
type: :boolean,
alias: :m,
defaults: [
something: "else"
]
}
flag "dir", do: [
type: :string
]
end
iex> MyArguments.parse(["--name", "myname"])
%{name: "myname", dir: "./myname"}
iex> MyArguments.parse(["new", "myname", "dirhere"])
%{new: true, name: "myname", dir: "dirhere"}
iex> MyArguments.parse(["--more"])
%{more: true}
iex> MyArguments.parse(["-m"])
%{more: true}
iex> MyArguments.parse(["--not-defined"])
%{}