/
web.ex
83 lines (72 loc) · 4.31 KB
/
web.ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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/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"},
]
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)
copy_from project, __MODULE__, :new
copy_from project, __MODULE__, :gettext
if Project.html?(project), do: gen_html(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
end