Packages

Provides `mix needle.new.*` tasks to bootstrap new Phoenix projects.

Current section

Files

Jump to
needle_new lib needle_new generators single.ex
Raw

lib/needle_new/generators/single.ex

defmodule Needle.New.Generators.Single do
@moduledoc false
use Needle.New.Generator
alias Needle.New.Project
alias Needle.New.Generators.Shared
template(:base, [
{:root_app, :eex, "needle_single/README.md"},
{:root_app, :eex, "needle_single/mix.exs"},
{:root_app, :eex, "needle_single/formatter.exs", filename: ".formatter.exs"},
{:root_app, :eex, "needle_single/gitignore", filename: ".gitignore"},
{:root_app, :eex, "needle_single/lib/<root_app>_application.ex"},
{:root_app, :eex, "needle_single/test/test_helper.exs"},
{:root_app, :config, "needle_single/config/config.exs"},
{:root_app, :config, "needle_single/config/dev.exs"},
{:root_app, :config, "needle_single/config/prod.exs"},
{:root_app, :config, "needle_single/config/test.exs"},
{:root_app, :config, "needle_single/config/runtime.exs"}
])
@impl true
def prepare_project(%Project{} = project) do
%{base_path: base_path, app: app, module: module} = project
root_app_path = base_path
root_app = app
root_module = module
ctx_app = app
ctx_module = module
ctx_lib = to_string(ctx_app)
ctx_app_path = base_path
web_app = app
web_module = Module.concat(["#{module}Web"])
web_lib = "#{project.app}_web"
web_app_path = base_path
%{
project
| in_umbrella?: false,
root_app_path: root_app_path,
root_app: root_app,
root_module: root_module,
ctx_app_path: ctx_app_path,
ctx_app: ctx_app,
ctx_module: ctx_module,
ctx_lib: ctx_lib,
web_app_path: web_app_path,
web_app: web_app,
web_module: web_module,
web_lib: web_lib
}
end
@impl true
def generate(%Project{} = project) do
copy_from(project, __MODULE__, :base)
Shared.patch(project, :web_base_single)
Shared.patch(project, :web)
if Project.assets?(project), do: Shared.patch(project, :assets)
if Project.html?(project), do: Shared.patch(project, :html)
if Project.live?(project), do: Shared.patch(project, :live)
Shared.patch(project, :ctx_base_single)
Shared.patch(project, :ctx)
if Project.ecto?(project), do: Shared.patch(project, :ecto)
if Project.mailer?(project), do: Shared.patch(project, :mailer)
if Project.gettext?(project), do: Shared.patch(project, :gettext)
project
end
end