SafeAtom.Ecto.Enum (SafeAtom v0.2.0)

Copy Markdown View Source

Parameterized Ecto type for whitelist-based atom enum fields.

Requires values: — a list of atoms allowed for the field. Values are stored as strings in the database. Cast, load, and dump use SafeAtom.cast/2 so external binaries never go through String.to_atom/1 or String.to_existing_atom/1.

Schema

field :role, SafeAtom.Ecto.Enum, values: [:user, :guest]

Examples

iex> params = SafeAtom.Ecto.Enum.init(values: [:user, :guest])
iex> SafeAtom.Ecto.Enum.cast("user", params)
{:ok, :user}

iex> params = SafeAtom.Ecto.Enum.init(values: [:user, :guest])
iex> SafeAtom.Ecto.Enum.cast("admin", params)
{:error, [validation: :inclusion, enum: [:user, :guest]]}

iex> params = SafeAtom.Ecto.Enum.init(values: [:user, :guest])
iex> SafeAtom.Ecto.Enum.dump(:user, fn _, v -> {:ok, v} end, params)
{:ok, "user"}