Firex

Build Status

Firex is a library for automatically generating command line interfaces (CLIs) from an elixir module

Basic Usage

Add use Firex to any module you would like to expose

defmodule Example do
use Firex
@moduledoc """
Module for my awesome launcher
"""
@doc """
Launch some awesome thing
"""
@spec launch(String.t, String.t) :: String.t
def launch(message, path) do
IO.puts "Hallo #{message} at `#{path}`"
end
@spec launch(String.t, String.t, Bool.t) :: String.t
def launch(message, path, force) when is_binary(message) do
IO.puts "Hallo #{message} at `#{path}` and forced #{force}"
end
@doc """
Stop previous task by id
"""
@spec stop(String.t) :: String.t
def stop(task_id) do
IO.puts "Stopping task #{task_id}"
end
end

Add it escript: [main_module: Example] to your mix file

# mix.exs
def project do
[
...
escript: [main_module: Example],
...
]
end

and then

➜ mix escript.build
Generated escript firex with MIX_ENV=dev
➜ ./app
Module for my awesome launcher
Usage:
<command>
Available commands:
launch: -m --message <message>, -p --path <path>, -f --force <force>
Launch some awesome thing
stop: -t --task_id <task_id>
Stop previous task by id

Installation

If available in Hex, the package can be installed as:

  1. Add firex to your list of dependencies in mix.exs:
def deps do
[{:firex, "~> 0.1.0"}]
end
  1. Ensure firex is started before your application:
def application do
[applications: [:firex]]
end