Popularity
3.9
Declining
Activity
0.0
Stable
25
3
1

Monthly Downloads: 8
Programming language: Elixir
License: MIT License
Latest version: v0.3

firex alternatives and similar packages

Based on the "Command Line Applications" category

Do you think we are missing an alternative of firex or a related project?

Add another 'Command Line Applications' Package

README

Firex

Build Status Hex Version

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

  • Inspired by Python Fire
  • Built on top of OptionParser and escript
  • Enhance exploring existing code or turning other people's code into a CLI for evaluation.
  • Outputs escript script executable (binary data)

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) 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

  @doc """
  Increments by one
  """
  @spec inc(Integer.t) :: String.t
  def inc(number) do
    IO.puts "Result #{number + 1}"
  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 app with MIX_ENV=dev
➜ ./app
Module for my awesome launcher

Available commands:

    launch: -m --message [message:string], -p --path [path:string], -f --force [force:boolean]

        Launch some awesome thing


    stop: -t --task_id [task_id:string]

        Stop previous task by id


    inc: -n --number [number:integer]

        Increments by one

➜ ./app inc -n 3
Result 4

Installation

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

Add firex to your list of dependencies in mix.exs:

def deps do
  [{:firex, "~> 0.1.0"}]
end

Todos

Known issues and opportunity for improvements:

  • [x] Convert @spec into OptionParser flags
    • Currently only :string is used
  • [x] Proper exit codes
    • Proper exit code on traceback
  • [ ] Warn when extra arguments passed
  • [ ] Autoregister main module - e.g escript: [main_module: Example]`
  • [ ] Colour output

License

Firex is [MIT Licensed](./LICENSE).


*Note that all licence references and agreements mentioned in the firex README section above are relevant to that project's source code only.