Packages

An `Elixir` library to write command line apps in a cleaner and elegant way!

Current section

Files

Jump to
nexus_cli examples escript example.ex
Raw

examples/escript/example.ex

defmodule Escript.Example do
@moduledoc """
This is an example on how to use `Nexus` with an
escript application.
After defined `:escript` entry into your `project/0` function
on `mix.exs` and set the `main_module` option, you can safely
define your commands as usual with `defcommand/2`, CLI config
and handlers.
Then you need to call `parse/0` macro, which will inject both
`parse/1` and `run/1` function, which the latter you can delegate
from the `main/1` escript funciton, as can seen below.
"""
use Nexus.CLI, otp_app: :nexus_cli
defcommand :echo do
description "Command that receives a string as argument and prints it."
value :string, required: true
end
defcommand :fizzbuzz do
description "Fizz bUZZ"
value :integer, required: true
end
defcommand :foo_bar do
description "Teste"
subcommand :foo do
description "hello"
value :string, required: false, default: "hello"
end
subcommand :bar do
description "hello"
value :string, required: false, default: "hello"
end
end
@impl true
def version, do: "0.1.0"
@impl true
def handle_input(:echo, %{value: value}) do
IO.puts(value)
end
def handle_input(:fizzbuzz, %{value: value}) when is_integer(value) do
cond do
rem(value, 3) == 0 and rem(value, 5) == 0 -> IO.puts("fizzbuzz")
rem(value, 3) == 0 -> IO.puts("fizz")
rem(value, 5) == 0 -> IO.puts("buzz")
true -> IO.puts value
end
end
def handle_input([:foo_bar, :foo], %{value: _}) do
IO.puts("Issued foo")
:ok
end
def handle_input([:foo_bar, :bar], %{value: _}) do
IO.puts("Issued bar")
:ok
end
defdelegate main(args), to: __MODULE__, as: :execute
end