analytics / lib /plausible /billing /ecto /feature.ex
Leon4gr45's picture
Upload folder using huggingface_hub
3e21b19 verified
Raw
History Blame Contribute Delete
745 Bytes
defmodule Plausible.Billing.Ecto.Feature do
@moduledoc """
Ecto type representing a feature. Features are cast and stored in the
database as strings and loaded as modules, for example: `"props"` is loaded
as `Plausible.Billing.Feature.Props`.
"""
use Ecto.Type
def type, do: :string
def cast(feature) when is_binary(feature) do
found =
Enum.find(Plausible.Billing.Feature.list(), fn mod ->
Atom.to_string(mod.name()) == feature
end)
if found, do: {:ok, found}, else: :error
end
def cast(mod) when is_atom(mod) do
{:ok, mod}
end
def load(feature) when is_binary(feature) do
cast(feature)
end
def dump(mod) when is_atom(mod) do
{:ok, Atom.to_string(mod.name())}
end
end