Packages
phx_new
1.8.0
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/project.ex
defmodule Phx.New.Project do
@moduledoc false
alias Phx.New.Project
defstruct base_path: nil,
app: nil,
app_mod: nil,
app_path: nil,
lib_web_name: nil,
root_app: nil,
root_mod: nil,
project_path: nil,
web_app: nil,
web_namespace: nil,
web_path: nil,
opts: :unset,
in_umbrella?: false,
binding: [],
cached_build_path: nil,
generators: [timestamp_type: :utc_datetime]
def new(project_path, opts) do
project_path = Path.expand(project_path)
app = opts[:app] || Path.basename(project_path)
app_mod = Module.concat([opts[:module] || Macro.camelize(app)])
%Project{
base_path: project_path,
app: app,
app_mod: app_mod,
root_app: app,
root_mod: app_mod,
opts: opts
}
end
def ecto?(%Project{binding: binding}) do
Keyword.fetch!(binding, :ecto)
end
def html?(%Project{binding: binding}) do
Keyword.fetch!(binding, :html)
end
def gettext?(%Project{binding: binding}) do
Keyword.fetch!(binding, :gettext)
end
def live?(%Project{binding: binding}) do
Keyword.fetch!(binding, :live)
end
def dashboard?(%Project{binding: binding}) do
Keyword.fetch!(binding, :dashboard)
end
def javascript?(%Project{binding: binding}) do
Keyword.fetch!(binding, :javascript)
end
def css?(%Project{binding: binding}) do
Keyword.fetch!(binding, :css)
end
def mailer?(%Project{binding: binding}) do
Keyword.fetch!(binding, :mailer)
end
def verbose?(%Project{opts: opts}) do
Keyword.get(opts, :verbose, false)
end
def join_path(%Project{} = project, location, path)
when location in [:project, :app, :web] do
project
|> Map.fetch!(:"#{location}_path")
|> Path.join(path)
|> expand_path_with_bindings(project)
end
defp expand_path_with_bindings(path, %Project{} = project) do
Regex.replace(Regex.recompile!(~r/:[a-zA-Z0-9_]+/), path, fn ":" <> key, _ ->
project |> Map.fetch!(:"#{key}") |> to_string()
end)
end
end