defmodule Mix.Tasks.Ca.New.Da do
@moduledoc """
Creates a new driven adapter for the clean architecture project
$ mix ca.new.da --type driven_adapter_name
Type param options:
* secrestsmanager
Examples:
$ mix ca.new.da --type driven_adapter_name --name my_adapter
$ mix ca.new.da --type secrestsmanager
"""
alias ScaffoldCa.Core.ApplyDrivenAdapterTemplate
alias ScaffoldCa.Utils.DataTypeUtils
use Mix.Task
@version Mix.Project.config()[:version]
@switches [type: :string, name: :string]
def run([]) do
Mix.Tasks.Help.run(["ca.new.da"])
end
def run([version]) when version in ~w(-v --version) do
Mix.shell().info([:reset, "Scaffold version ", :green, "v#{@version}"])
end
@shortdoc "Creates a new driven adapter"
def run(args) do
case Mix.Project.config() |> Keyword.fetch(:app) do
:error ->
Mix.shell().error("It is not a elixir project")
{:ok, app_name} ->
apply_template(app_name, args)
end
end
defp apply_template(app_name, args) do
case DataTypeUtils.parse_opts(args, @switches) do
{opts, []} ->
Mix.shell().info([:green, "* Creating driven adapter ", :reset, opts[:type]])
ApplyDrivenAdapterTemplate.create_driven_adapter(
to_string(app_name),
opts[:name] || "valid_name",
String.to_atom(opts[:type])
)
Mix.shell().info([:green, "* Driven Adapter created"])
{_opts, [_ | _]} ->
Mix.Tasks.Help.run(["ca.new.model"])
end
end
end