Packages
igniter
0.5.52
0.8.2
0.8.1
0.8.0
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.30
0.6.29
0.6.28
0.6.27
0.6.26
0.6.25
0.6.24
0.6.23
0.6.22
0.6.21
0.6.20
0.6.19
0.6.18
0.6.17
0.6.16
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.52
0.5.51
0.5.50
0.5.49
0.5.48
0.5.47
0.5.46
0.5.45
0.5.44
0.5.43
0.5.42
0.5.41
0.5.40
0.5.39
0.5.38
0.5.37
0.5.36
0.5.35
0.5.34
0.5.33
0.5.32
0.5.31
0.5.30
0.5.29
0.5.28
0.5.27
0.5.26
0.5.25
0.5.24
0.5.23
0.5.22
0.5.21
0.5.20
0.5.19
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.78
0.3.77
0.3.76
0.3.75
0.3.74
0.3.73
0.3.72
0.3.71
0.3.70
0.3.69
0.3.68
0.3.67
0.3.66
0.3.65
0.3.64
0.3.63
0.3.62
0.3.61
0.3.60
0.3.59
0.3.58
0.3.57
0.3.56
0.3.55
0.3.54
0.3.53
0.3.52
0.3.51
0.3.50
0.3.49
0.3.48
0.3.47
0.3.46
0.3.45
0.3.44
0.3.43
0.3.42
0.3.41
0.3.40
0.3.39
0.3.38
0.3.37
0.3.36
0.3.35
0.3.34
0.3.33
0.3.32
0.3.31
0.3.30
0.3.29
0.3.28
0.3.27
0.3.26
0.3.25
0.3.24
0.3.23
0.3.22
0.3.21
0.3.20
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
A code generation and project patching framework
Current section
Files
Jump to
Current section
Files
lib/igniter/phoenix/generator.ex
defmodule Igniter.Phoenix.Generator do
@moduledoc false
# Wrap Phx.New.Generator
# https://github.com/phoenixframework/phoenix/blob/7586cbee9e37afbe0b3cdbd560b9e6aa60d32bf6/installer/lib/phx_new/generator.ex#L69
def copy_from(igniter, project, mod, name) when is_atom(name) do
mapping = mod.template_files(name)
templates =
for {format, _project_location, files} <- mapping,
{source, target_path} <- files,
source = to_string(source) do
target = expand_path_with_bindings(target_path, project)
{format, source, target}
end
Enum.reduce(templates, igniter, fn {format, source, target}, acc ->
case format do
:keep ->
acc
:text ->
contents = mod.render(name, source, project.binding)
Igniter.create_new_file(acc, target, contents, on_exists: :overwrite)
:config ->
contents = mod.render(name, source, project.binding)
config_inject(acc, target, contents)
:prod_config ->
contents = mod.render(name, source, project.binding)
prod_only_config_inject(acc, target, contents)
:eex ->
contents = mod.render(name, source, project.binding)
Igniter.create_new_file(acc, target, contents, on_exists: :overwrite)
end
end)
end
defp expand_path_with_bindings(path, project) do
Regex.replace(Regex.recompile!(~r/:[a-zA-Z0-9_]+/), path, fn ":" <> key, _ ->
project |> Map.fetch!(:"#{key}") |> to_string()
end)
end
defp config_inject(igniter, file, to_inject) do
patterns = [
"""
import Config
__cursor__()
"""
]
Igniter.create_or_update_elixir_file(igniter, file, to_inject, fn zipper ->
case Igniter.Code.Common.move_to_cursor_match_in_scope(zipper, patterns) do
{:ok, zipper} ->
{:ok, Igniter.Code.Common.add_code(zipper, to_inject)}
_ ->
{:warning,
"""
Could not automatically inject the following config into #{file}
#{to_inject}
"""}
end
end)
end
defp prod_only_config_inject(igniter, file, to_inject) do
patterns = [
"""
if config_env() == :prod do
__cursor__()
end
""",
"""
if :prod == config_env() do
__cursor__()
end
"""
]
Igniter.create_or_update_elixir_file(igniter, file, to_inject, fn zipper ->
case Igniter.Code.Common.move_to_cursor_match_in_scope(zipper, patterns) do
{:ok, zipper} ->
{:ok, Igniter.Code.Common.add_code(zipper, to_inject)}
_ ->
{:warning,
"""
Could not automatically inject the following config into #{file}
#{to_inject}
"""}
end
end)
end
def gen_ecto_config(igniter, %{binding: binding}) do
adapter_config = binding[:adapter_config]
config_inject(igniter, "config/dev.exs", """
# Configure your database
config :#{binding[:app_name]}, #{binding[:app_module]}.Repo#{kw_to_config(adapter_config[:dev])}
""")
end
defp kw_to_config(kw) do
Enum.map(kw, fn
{k, {:literal, v}} -> ",\n #{k}: #{v}"
{k, v} -> ",\n #{k}: #{inspect(v)}"
end)
end
end