Current section

Files

Jump to
surface lib mix tasks surface surface.init project_patchers demo.ex
Raw

lib/mix/tasks/surface/surface.init/project_patchers/demo.ex

defmodule Mix.Tasks.Surface.Init.ProjectPatchers.Demo do
@moduledoc false
alias Mix.Tasks.Surface.Init.FilePatchers
@behaviour Mix.Tasks.Surface.Init.ProjectPatcher
@impl true
def specs(%{demo: true} = assigns) do
%{web_module: web_module, web_path: web_path, web_test_path: web_test_path} = assigns
[
{:patch, "#{web_path}/router.ex", [configure_demo_route(web_module)]},
{:create, "demo/card.ex", Path.join([web_path, "components"])},
{:create, "demo/card_test.exs", Path.join([web_test_path, "components"])},
{:create, "demo/demo.ex", Path.join([web_path, "live"])}
]
end
def specs(_assigns), do: []
def configure_demo_route(web_module) do
%{
name: "Configure demo route",
patch:
&FilePatchers.Phoenix.append_route_to_main_scope(
&1,
~S("/demo"),
web_module,
~S(live "/demo", Demo)
),
instructions: """
Update your `router.ex` configuration so the demo can be available at `/demo`.
# Example
```
scope "/", MyAppWeb do
pipe_through :browser
live "/demo", Demo
end
```
"""
}
end
end