defmodule PhilColumns.Seed do defmacro __using__(_opts) do quote location: :keep do import PhilColumns.Seed @disable_ddl_transaction false Module.register_attribute(__MODULE__, :envs, accumulate: true) Module.register_attribute(__MODULE__, :tags, accumulate: true) @before_compile PhilColumns.Seed def down(repo) do end def up(repo) do end defoverridable down: 1, up: 1 end end @doc false defmacro __before_compile__(env) do envs = Module.get_attribute(env.module, :envs) tags = Module.get_attribute(env.module, :tags) if envs == [] do raise "no envs have been defined in #{inspect(env.module)}" end quote do def __seed__, do: [disable_ddl_transaction: @disable_ddl_transaction] def envs, do: unquote(List.flatten(envs) |> Enum.dedup() |> Enum.sort()) def tags, do: unquote(List.flatten(tags) |> Enum.dedup() |> Enum.sort()) end end defmacro env(env) do quote do @envs unquote(env) end end defmacro envs(envs) do quote do @envs unquote(envs) end end defmacro tag(tag) do quote do @tags unquote(tag) end end defmacro tags(tags) do quote do @tags unquote(tags) end end end