README.md

[![Build Status](https://travis-ci.org/svetob/commando.svg?branch=master)](https://travis-ci.org/svetob/commando)

# Commando

__Commando__ is a command line parser which uses OptionParser behind-the-hood
and extends it with:

  - Simple and informative help messages
  - Descriptive error messages
  - Default values for switches
  - Option to specify required switches

## Usage

Add `commando` as a dependency to your `mix.exs` file:

```
defp deps do
  [{:commando, "~> 0.1"}]
end
```

Then run `mix deps.get` to download it.

## Example

`example.exs`:
```Elixir
c = Commando.create("example app", "An example application", "mix run example.exs")
  |> Commando.with_help()
  |> Commando.with_switch(:port, :integer, "HTTP port", required: true, alias: :p)
  |> Commando.with_switch(:data_path, :string, "Data path", default: "data/", alias: :d)

case Commando.parse(c, System.argv()) do
  {:ok, result} ->
      IO.inspect result
  {:help, message} ->
    IO.puts message
  {:error, reason} ->
    IO.puts reason
    IO.puts Commando.help_message(c)
end
```


```
$ mix run example.exs -h
example app - An example application

Arguments:
  --data_path, -d : Data path (Default: "data/")
  --port, -p : (Required) HTTP port
  --help, -h : Print help message

Example: mix run example.exs

$ mix run example.exs --port 8080
[data_path: "data/", port: 8080]

$ mix run example.exs
Missing required options: port
example app - An example application

Arguments:
  --data_path, -d : Data path (Default: "data/")
  --port, -p : (Required) HTTP port
  --help, -h : Print help message

Example: mix run example.exs
```