Current section

Files

Jump to
cascade lib mix tasks cascade.ex
Raw

lib/mix/tasks/cascade.ex

defmodule Mix.Tasks.Cascade do
use Mix.Task
@args_schema [
root: [
type: :string,
doc: """
The root path under which the template will be generated.
- If it is not set it defaults to the current working directory.
- If it is a relative path is is expanded with respect to the
current working directory.
- If is is an absolute path it is used unchanged.
"""
]
]
@shortdoc "Generates code from a template"
@moduledoc """
Generates code from the given template.
It expects the template name as argument.
$ mix cascade template_name [--root PATH] -- [...]
Notice that individual templates may support extra command line
arguments. These must be specified after the `--` separator.
You can list all available templates by running:
$ mix cascade.help
You can get detailed docs for a specific template by running:
$ mix cascade.help template_name
## Options
#{CliOptions.docs(@args_schema)}
"""
@impl Mix.Task
def run(argv) do
{opts, args, extra} = CliOptions.parse!(argv, @args_schema)
case args do
[template] ->
template = String.to_atom(template)
root_path = Path.expand(opts[:root] || File.cwd!())
case Cascade.generate(template, root_path, extra) do
{:error, reason} -> Mix.raise(reason)
_other -> :ok
end
_other ->
Mix.raise(
"expected a single template to be given, please use \"mix cascade template_name\""
)
end
end
end