Current section

Files

Jump to
phx_custom lib mix tasks phx.custom.web.ex
Raw

lib/mix/tasks/phx.custom.web.ex

defmodule Mix.Tasks.Phx.Custom.Web do
@shortdoc "Patch current project with custom Web template."
@moduledoc """
#{@shortdoc}
mix phx.custom.web <project>
"""
use Mix.Task
alias PhxCustom.Web
@impl Mix.Task
def run(args) do
parse_args(args)
|> validate
|> process
end
def parse_args(args) do
OptionParser.parse(args, strict: [])
|> elem(1)
|> args_to_internal_representation()
end
defp args_to_internal_representation([project_root]) do
{project_root}
end
defp args_to_internal_representation(_) do
:help
end
defp validate(args) do
args
|> validate_project_root
end
defp validate_project_root({project_root} = args) do
case File.lstat(project_root) do
{:ok, %File.Stat{type: :directory}} ->
args
_ ->
IO.puts("invalid project root.\n")
System.halt(0)
end
end
def process({project_root}) do
root = Path.expand(project_root, File.cwd!())
Web.patch(root)
end
end