defmodule Mix.Tasks.CandleClock.Gen.Migrations do
use Mix.Task
alias CandleClock.MixTasks.Utils
require EEx
migrations = "./templates/migrations/"
@migrations Path.join([__DIR__, migrations])
|> File.ls!()
|> Enum.map(fn file ->
%{
source: Path.join([__DIR__, migrations, file]),
target: "priv/repo/migrations/" <> String.replace_trailing(file, ".eex", ""),
fun_name:
("render_migration_" <> String.replace_trailing(file, ".exs.eex", ""))
|> String.to_atom()
}
end)
for migration <- @migrations do
EEx.function_from_file(:def, migration.fun_name, migration.source, [:assigns])
end
def run(params) do
{opts, _, _} = OptionParser.parse(params, strict: [overwrite: :boolean])
assigns = %{
module_prefix: "CandleClock.Migrations",
table_name: "candle_clock_timers",
db_datetime_type: ~S[:"timestamp with time zone"]
}
create_migrations(assigns, opts)
end
def create_migrations(assigns, options) do
File.mkdir_p!("priv/repo/migrations")
for migration <- @migrations do
code = apply(__MODULE__, migration.fun_name, [assigns])
Utils.write(migration.target, code, options)
end
end
for var <- [:module_prefix, :table_name, :db_datetime_type] do
defp unquote(var)(params) do
Map.get(params, unquote(var))
end
end
end