Packages
phx_new
1.5.6
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/web.ex
defmodule Phx.New.Web do
@moduledoc false
use Phx.New.Generator
alias Phx.New.{Project}
@pre "phx_umbrella/apps/app_name_web"
template :new, [
{:config, "#{@pre}/config/config.exs", :project, "config/config.exs"},
{:config, "#{@pre}/config/dev.exs", :project, "config/dev.exs"},
{:config, "#{@pre}/config/prod.exs", :project, "config/prod.exs"},
{:config, "#{@pre}/config/prod.secret.exs", :project, "config/prod.secret.exs"},
{:config, "#{@pre}/config/test.exs", :project, "config/test.exs"},
{:eex, "#{@pre}/lib/app_name.ex", :web, "lib/:web_app.ex"},
{:eex, "#{@pre}/lib/app_name/application.ex", :web, "lib/:web_app/application.ex"},
{:eex, "phx_web/channels/user_socket.ex", :web, "lib/:web_app/channels/user_socket.ex"},
{:keep, "phx_web/controllers", :web, "lib/:web_app/controllers"},
{:eex, "phx_web/endpoint.ex", :web, "lib/:web_app/endpoint.ex"},
{:eex, "phx_web/router.ex", :web, "lib/:web_app/router.ex"},
{:eex, "phx_web/telemetry.ex", :web, "lib/:web_app/telemetry.ex"},
{:eex, "phx_web/views/error_helpers.ex", :web, "lib/:web_app/views/error_helpers.ex"},
{:eex, "phx_web/views/error_view.ex", :web, "lib/:web_app/views/error_view.ex"},
{:eex, "#{@pre}/mix.exs", :web, "mix.exs"},
{:eex, "#{@pre}/README.md", :web, "README.md"},
{:eex, "#{@pre}/gitignore", :web, ".gitignore"},
{:keep, "phx_test/channels", :web, "test/:web_app/channels"},
{:keep, "phx_test/controllers", :web, "test/:web_app/controllers"},
{:eex, "#{@pre}/test/test_helper.exs", :web, "test/test_helper.exs"},
{:eex, "phx_test/support/channel_case.ex", :web, "test/support/channel_case.ex"},
{:eex, "phx_test/support/conn_case.ex", :web, "test/support/conn_case.ex"},
{:eex, "phx_test/views/error_view_test.exs", :web, "test/:web_app/views/error_view_test.exs"},
{:eex, "#{@pre}/formatter.exs", :web, ".formatter.exs"},
]
template :gettext, [
{:eex, "phx_gettext/gettext.ex", :web, "lib/:web_app/gettext.ex"},
{:eex, "phx_gettext/en/LC_MESSAGES/errors.po", :web, "priv/gettext/en/LC_MESSAGES/errors.po"},
{:eex, "phx_gettext/errors.pot", :web, "priv/gettext/errors.pot"}
]
template :html, [
{:eex, "phx_web/controllers/page_controller.ex", :web, "lib/:web_app/controllers/page_controller.ex"},
{:eex, "phx_web/templates/layout/app.html.eex", :web, "lib/:web_app/templates/layout/app.html.eex"},
{:eex, "phx_web/templates/page/index.html.eex", :web, "lib/:web_app/templates/page/index.html.eex"},
{:eex, "phx_web/views/layout_view.ex", :web, "lib/:web_app/views/layout_view.ex"},
{:eex, "phx_web/views/page_view.ex", :web, "lib/:web_app/views/page_view.ex"},
{:eex, "phx_test/controllers/page_controller_test.exs", :web, "test/:web_app/controllers/page_controller_test.exs"},
{:eex, "phx_test/views/layout_view_test.exs", :web, "test/:web_app/views/layout_view_test.exs"},
{:eex, "phx_test/views/page_view_test.exs", :web, "test/:web_app/views/page_view_test.exs"},
]
template :live, [
{:eex, "phx_live/templates/layout/root.html.leex", :web, "lib/:web_app/templates/layout/root.html.leex"},
{:eex, "phx_live/templates/layout/app.html.leex", :web, "lib/:web_app/templates/layout/app.html.eex"},
{:eex, "phx_live/templates/layout/live.html.leex", :web, "lib/:web_app/templates/layout/live.html.leex"},
{:eex, "phx_web/views/layout_view.ex", :web, "lib/:web_app/views/layout_view.ex"},
{:eex, "phx_live/live/page_live.ex", :web, "lib/:web_app/live/page_live.ex"},
{:eex, "phx_web/templates/page/index.html.eex", :web, "lib/:web_app/live/page_live.html.leex"},
{:eex, "phx_test/views/layout_view_test.exs", :web, "test/:web_app/views/layout_view_test.exs"},
{:eex, "phx_test/live/page_live_test.exs", :web, "test/:web_app/live/page_live_test.exs"},
]
def prepare_project(%Project{app: app} = project) when not is_nil(app) do
web_path = Path.expand(project.base_path)
project_path = Path.dirname(Path.dirname(web_path))
%Project{project |
in_umbrella?: true,
project_path: project_path,
web_path: web_path,
web_app: app,
generators: [context_app: false],
web_namespace: project.app_mod}
end
def generate(%Project{} = project) do
inject_umbrella_config_defaults(project)
if Project.live?(project), do: Phx.New.Single.assert_live_switches!(project)
copy_from project, __MODULE__, :new
cond do
Project.live?(project) -> gen_live(project)
Project.html?(project) -> gen_html(project)
true -> :noop
end
if Project.gettext?(project), do: gen_gettext(project)
case {Project.webpack?(project), Project.html?(project)} do
{true, _} -> Phx.New.Single.gen_webpack(project)
{false, true} -> Phx.New.Single.gen_static(project)
{false, false} -> Phx.New.Single.gen_bare(project)
end
project
end
defp gen_html(%Project{} = project) do
copy_from project, __MODULE__, :html
end
defp gen_gettext(%Project{} = project) do
copy_from project, __MODULE__, :gettext
end
defp gen_live(%Project{} = project) do
copy_from project, __MODULE__, :live
end
end