ProductPromotion
Logo

Elixir

made by https://0x3d.site

GitHub - msoedov/firex: Firex is a library for automatically generating command line interfaces (CLIs) from elixir module
Firex is a library for automatically generating command line interfaces (CLIs) from elixir module - msoedov/firex
Visit Site

GitHub - msoedov/firex: Firex is a library for automatically generating command line interfaces (CLIs) from elixir module

GitHub - msoedov/firex: Firex is a library for automatically generating command line interfaces (CLIs) from elixir module

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:

  • Convert @spec into OptionParser flags
    • Currently only :string is used
  • 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.

Articles
to learn more about the elixir concepts.

Resources
which are currently available to browse on.

mail [email protected] to add your project or resources here 🔥.

FAQ's
to know more about the topic.

mail [email protected] to add your project or resources here 🔥.

Queries
or most google FAQ's about Elixir.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory