Packages

A CLI tool to manage package dependencies

Current section

Files

Jump to
wand lib cli commands help.ex
Raw

lib/cli/commands/help.ex

defmodule Wand.CLI.Commands.Help do
use Wand.CLI.Command
alias Wand.CLI.Display
alias Wand.CLI.Command
@moduledoc Wand.banner()
@doc false
def help(:banner), do: Display.print(Wand.banner())
@doc false
def help(:verbose) do
help(:banner)
Command.routes()
|> List.delete("help")
|> Enum.each(fn name ->
module = Command.get_module(name)
module.help(:banner)
"------------------------------------" |> Display.print()
end)
end
@doc false
def help({:invalid_flag, flag}) do
"""
# Error
`#{flag}` is not a valid flag for help.
Valid flags are:
--verbose Detailed help for every command
--? Same as --verbose
"""
|> Display.print()
end
@doc false
def help({:unrecognized, command}) do
"""
# Error
`#{command}` is not a recognized command.
Type **wand help --verbose** for more information.
"""
|> Display.print()
end
@doc false
def validate(args) do
flags = [
verbose: :boolean,
"?": :boolean
]
{switches, [_ | commands], errors} = OptionParser.parse(args, strict: flags)
case Command.parse_errors(errors) do
:ok -> parse(commands, verbose?(switches))
error -> error
end
end
@doc false
def execute(_commands, _extra) do
help(:banner)
{:ok, %Result{message: nil}}
end
defp parse(["help"], _verbose), do: {:error, :verbose}
defp parse([name], verbose) do
flag =
case verbose do
true -> :verbose
false -> :banner
end
case Enum.member?(Command.routes(), name) do
true -> {:help, String.to_atom(name), flag}
false -> {:error, {:unrecognized, name}}
end
end
defp parse(_commands, _verbose = true), do: {:error, :verbose}
defp parse(_commands, _verbose = false), do: {:error, :banner}
defp verbose?(switches) do
cond do
Keyword.get(switches, :verbose) -> true
Keyword.get(switches, :"?") -> true
true -> false
end
end
end