Packages
phx_new
1.5.13
1.8.9
1.8.8
1.8.7
1.8.6
1.8.5
1.8.4
1.8.3
1.8.2
1.8.1
1.8.0
1.8.0-rc.4
1.8.0-rc.3
1.8.0-rc.2
1.8.0-rc.1
1.8.0-rc.0
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.7.0-rc.3
1.7.0-rc.2
1.7.0-rc.1
1.7.0-rc.0
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.6.0-rc.1
1.6.0-rc.0
1.5.15
1.5.14
1.5.13
1.5.12
1.5.11
1.5.10
1.5.9
1.5.8
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.5.0-rc.0
1.4.18
1.4.17
1.4.16
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-rc.3
1.4.0-rc.2
1.4.0-rc.1
1.4.0-rc.0
1.4.0-dev.0
1.3.5
Phoenix framework project generator. Provides a `mix phx.new` task to bootstrap a new Elixir application with Phoenix dependencies.
Current section
Files
Jump to
Current section
Files
lib/phx_new/umbrella.ex
defmodule Phx.New.Umbrella do
@moduledoc false
use Phx.New.Generator
alias Phx.New.{Ecto, Web, Project}
template :new, [
{:eex, "phx_umbrella/gitignore", :project, ".gitignore"},
{:eex, "phx_umbrella/config/config.exs", :project, "config/config.exs"},
{:config, "phx_umbrella/config/extra_config.exs", :project, "config/config.exs"},
{:eex, "phx_umbrella/config/dev.exs", :project, "config/dev.exs"},
{:eex, "phx_umbrella/config/test.exs", :project, "config/test.exs"},
{:eex, "phx_umbrella/config/prod.exs", :project, "config/prod.exs"},
{:eex, "phx_umbrella/config/prod.secret.exs", :project, "config/prod.secret.exs"},
{:eex, "phx_umbrella/mix.exs", :project, "mix.exs"},
{:eex, "phx_umbrella/README.md", :project, "README.md"},
{:eex, "phx_umbrella/formatter.exs", :project, ".formatter.exs"},
]
def prepare_project(%Project{app: app} = project) when not is_nil(app) do
project
|> put_app()
|> put_web()
|> put_root_app()
end
defp put_app(project) do
project_path = Path.expand(project.base_path <> "_umbrella")
app_path = Path.join(project_path, "apps/#{project.app}")
%Project{project |
in_umbrella?: true,
app_path: app_path,
project_path: project_path}
end
def put_web(%Project{app: app, opts: opts} = project) do
web_app = :"#{app}_web"
web_namespace = Module.concat([opts[:web_module] || "#{project.app_mod}Web"])
%Project{project |
web_app: web_app,
lib_web_name: web_app,
web_namespace: web_namespace,
generators: [context_app: :"#{app}"],
web_path: Path.join(project.project_path, "apps/#{web_app}/")}
end
defp put_root_app(%Project{app: app} = project) do
%Project{project |
root_app: :"#{app}_umbrella",
root_mod: Module.concat(project.app_mod, "Umbrella")}
end
def generate(%Project{} = project) do
if in_umbrella?(project.project_path) do
Mix.raise "Unable to nest umbrella project within apps"
end
copy_from project, __MODULE__, :new
project
|> Web.generate()
|> Ecto.generate()
end
end