defmodule Mix.Tasks.Kraken.Init do use Mix.Task import Mix.Generator @shortdoc "Creates basic folders structure and examples" @moduledoc """ Creates necessary files. """ @lib_folders [ "lib/kraken", "lib/kraken/clients", "lib/kraken/helpers", "lib/kraken/lambdas", "lib/kraken/pipelines", "lib/kraken/services" ] @lib_files [ {"clients/kv_store.eex", "lib/kraken/clients/kv_store.ex"}, {"helpers/yes_no_branch.eex", "lib/kraken/helpers/yes_no_branch.ex"}, {"lambdas/greeter.eex", "lib/kraken/lambdas/greeter.ex"}, {"pipelines/hello.json.eex", "lib/kraken/pipelines/hello.json"}, {"services/greeter.json.eex", "lib/kraken/services/greeter.json"}, {"services/kv-store.json.eex", "lib/kraken/services/kv-store.json"} ] @test_folders [ "test/kraken/clients", "test/kraken/pipelines", "test/kraken/services" ] @test_files [ {"clients/kv_store_test.eex", "test/kraken/clients/kv_store_test.exs"}, {"pipelines/hello_test.eex", "test/kraken/pipelines/hello_test.exs"}, {"services/greeter_test.eex", "test/kraken/services/greeter_test.exs"}, {"services/kv_store_test.eex", "test/kraken/services/kv_store_test.exs"} ] def run(_args) do main_module = "#{Mix.Project.get!()}" |> String.split(".") |> Enum.at(1) populate_lib(main_module) populate_test(main_module) end defp populate_lib(main_module) do create_folder(@lib_folders) path = Path.expand("..", __ENV__.file) <> "/init/kraken" copy_files(@lib_files, path, main_module) File.cp!("#{path}/routes.json", "lib/kraken/routes.json") end defp populate_test(main_module) do create_folder(@test_folders) path = Path.expand("..", __ENV__.file) <> "/init/test" copy_files(@test_files, path, main_module) end defp copy_files(files, path, main_module) do Enum.map(files, fn {from, to} -> content = EEx.eval_file("#{path}/#{from}", main_module: main_module) File.write!(to, content) end) end defp create_folder(folders) do Enum.map(folders, &create_directory/1) end end