Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/msoedov/firex
Firex is a library for automatically generating command line interfaces (CLIs) from elixir module
https://github.com/msoedov/firex
cli cli-generators elixir
Last synced: 7 days ago
JSON representation
Firex is a library for automatically generating command line interfaces (CLIs) from elixir module
- Host: GitHub
- URL: https://github.com/msoedov/firex
- Owner: msoedov
- License: mit
- Created: 2017-05-11T00:12:46.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-02-16T19:01:38.000Z (over 6 years ago)
- Last Synced: 2024-10-18T22:23:35.302Z (16 days ago)
- Topics: cli, cli-generators, elixir
- Language: Elixir
- Homepage:
- Size: 62.5 KB
- Stars: 25
- Watchers: 5
- Forks: 1
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- freaking_awesome_elixir - Elixir - Firex is a library for automatically generating command line interfaces (CLIs) from an elixir module. (Command Line Applications)
- fucking-awesome-elixir - firex - Firex is a library for automatically generating command line interfaces (CLIs) from an elixir module. (Command Line Applications)
- awesome-elixir - firex - Firex is a library for automatically generating command line interfaces (CLIs) from an elixir module. (Command Line Applications)
README
# Firex
[![Build Status](https://travis-ci.org/msoedov/firex.svg?branch=master)](https://travis-ci.org/msoedov/firex)
[![Hex Version](https://img.shields.io/hexpm/v/firex.svg)](https://hex.pm/packages/firex)Firex is a library for automatically generating command line interfaces (CLIs) from an elixir module
- Inspired by [Python Fire](https://github.com/google/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]( http://erlang.org/doc/man/escript.html) script executable (binary data)## Basic Usage
Add `use Firex` to any module you would like to expose
```elixir
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}"
endend
```Add it `escript: [main_module: Example]` to your mix file
```elixir
# mix.exs
def project do
[
...
escript: [main_module: Example],
...
]
end
```
and then```shell
➜ mix escript.build
Generated escript app with MIX_ENV=dev
➜ ./app
Module for my awesome launcherAvailable 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](https://hex.pm/packages/firex), the package can be installed as:
Add `firex` to your list of dependencies in `mix.exs`:
```elixir
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).