Current section
Files
Jump to
Current section
Files
lib/anubis.ex
defmodule Anubis do
defmacro command(name, description \\ "", f) do
quote do
@commands @commands ++ [{ unquote(to_string name), unquote(description) }]
def _command([unquote(to_string name)|args]), do: args |> unquote(f)
end
end
defmacro parse do
quote do
def _command(["help"|_]), do: help
def _command(_) do
IO.puts "Command unknown."
help
end
def help do
IO.puts "Valid commands are:\n"
@commands
|> Enum.map(&("#{elem(&1, 0)} - #{elem(&1, 1)}"))
|> Enum.join("\n")
|> IO.puts
end
end
end
defmacro __using__(_opts) do
quote do
import Mix.Task
import unquote(__MODULE__)
@commands []
def run(args) do
OptionParser.parse(args)
|> elem(1)
|> _command
end
end
end
end