Packages

Project repository template to set up all public Phoenix projects at Nimble

Current section

Files

Jump to
nimble_phx_gen_template lib mix tasks nimble.phx.gen.template.ex
Raw

lib/mix/tasks/nimble.phx.gen.template.ex

defmodule Mix.Tasks.Nimble.Phx.Gen.Template do
@shortdoc "Generates Nimble's Phoenix template"
use Mix.Task
alias Nimble.Phx.Gen.Template.{Project, Template}
@version Mix.Project.config()[:version]
@variants [api: :boolean, web: :boolean, live: :boolean]
def run([args]) when args in ~w(-v --version) do
Mix.shell().info("Nimble.Phx.Gen.Template v#{@version}")
end
def run(args) do
if Mix.Project.umbrella?() do
Mix.raise("mix nimble.phx.gen.template can only be run inside an application directory")
end
{opts, _params} = parse_opts(args)
{:ok, _} = Application.ensure_all_started(:httpoison)
Template.apply(Project.new(opts))
end
defp parse_opts(args) do
case OptionParser.parse(args, strict: @variants) do
{opts, args, []} ->
{opts, args}
{_opts, _args, [switch | _]} ->
Mix.raise("Invalid option: " <> humanize_variant_option(switch))
end
end
defp humanize_variant_option({name, nil}), do: name
defp humanize_variant_option({name, val}), do: name <> "=" <> val
end