lib/mix/gen_schema.ex

defmodule Mix.Tasks.CandleClock.Gen.Schema do
  alias CandleClock.MixTasks.Utils

  require EEx
  template_file = Path.join([__DIR__, "./templates/schema.ex.eex"])
  EEx.function_from_file(:defp, :render_schema, template_file, [:assigns])

  def run(params) do
    {opts, [filename], _} = OptionParser.parse(params, strict: [overwrite: :boolean])

    assigns = %{
      schema_name: "CandleClock.Timer",
      table_name: "candle_clock_timers",
      datetime_type: ":utc_datetime_usec"
    }

    code = render_schema(assigns)

    Utils.write(filename, code, opts)
  end

  for var <- [:schema_name, :table_name, :datetime_type] do
    defp unquote(var)(params) do
      Map.get(params, unquote(var))
    end
  end
end