defmodule Mix.Tasks.Pow.Install do
@shortdoc "Runs install mix tasks for Ecto and Phoenix"
@moduledoc """
Runs install mix tasks for Ecto and Phoenix.
mix pow.install -r MyApp.Repo
mix pow.install -r MyApp.Repo Accounts.Account accounts
See `Mix.Tasks.Pow.Ecto.Install` and `Mix.Tasks.Pow.Phoenix.Install` for
more.
"""
use Mix.Task
alias Mix.{Pow, Project, Tasks.Pow.Ecto, Tasks.Pow.Phoenix}
@mix_task "pow.install"
@impl true
def run(args) do
no_umbrella!()
schema_opts = schema_opts(args)
args
|> run_ecto_install()
|> run_phoenix_install(schema_opts)
end
defp schema_opts({_config, parsed, _invalid}) do
Pow.validate_schema_args!(parsed, @mix_task)
end
defp schema_opts(args) when is_list(args) do
args
|> Pow.parse_options([], [])
|> schema_opts()
end
defp run_ecto_install(args) do
Ecto.Install.run(args)
args
end
defp run_phoenix_install(args, schema_opts) do
Phoenix.Install.run(args, schema_opts)
end
defp no_umbrella! do
if Project.umbrella?() do
Mix.raise(
"""
mix #{@mix_task} has to be used inside an application directory, but this is an umbrella project.
Run mix pow.ecto.install inside your Ecto application directory to create schema module and migrations.
Run mix pow.phoenix.install in your Phoenix application directory for configuration instructions.
""")
end
:ok
end
end