34 lines
1.1 KiB
Elixir
34 lines
1.1 KiB
Elixir
|
defmodule Mix.Tasks.Phx.Gen.Auth.Migration do
|
||
|
@moduledoc false
|
||
|
|
||
|
defstruct [:ecto_adapter, :extensions, :column_definitions]
|
||
|
|
||
|
def build(ecto_adapter) when is_atom(ecto_adapter) do
|
||
|
%__MODULE__{
|
||
|
ecto_adapter: ecto_adapter,
|
||
|
extensions: extensions(ecto_adapter),
|
||
|
column_definitions: column_definitions(ecto_adapter)
|
||
|
}
|
||
|
end
|
||
|
|
||
|
defp extensions(Ecto.Adapters.Postgres) do
|
||
|
["execute \"CREATE EXTENSION IF NOT EXISTS citext\", \"\""]
|
||
|
end
|
||
|
|
||
|
defp extensions(_), do: []
|
||
|
|
||
|
defp column_definitions(ecto_adapter) do
|
||
|
for field <- ~w(email token)a,
|
||
|
into: %{},
|
||
|
do: {field, column_definition(field, ecto_adapter)}
|
||
|
end
|
||
|
|
||
|
defp column_definition(:email, Ecto.Adapters.Postgres), do: "add :email, :citext, null: false"
|
||
|
defp column_definition(:email, Ecto.Adapters.SQLite3), do: "add :email, :string, null: false, collate: :nocase"
|
||
|
defp column_definition(:email, _), do: "add :email, :string, null: false, size: 160"
|
||
|
|
||
|
defp column_definition(:token, Ecto.Adapters.Postgres), do: "add :token, :binary, null: false"
|
||
|
|
||
|
defp column_definition(:token, _), do: "add :token, :binary, null: false, size: 32"
|
||
|
end
|