Popularity
3.8
Declining
Activity
0.0
Stable
25
3
1

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

firex alternatives and similar packages

Based on the "Command Line Applications" category.
Alternatively, view firex alternatives based on common mentions on social networks and blogs.

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.