Current section

Files

Jump to
ex_admin_runtime lib ex_admin changeset.ex
Raw

lib/ex_admin/changeset.ex

defmodule ExAdmin.Changeset do
@moduledoc false
alias __MODULE__, as: Cs
defstruct valid?: true, changeset: nil, errors: nil, dependents: [], required: []
def update(%Cs{} = r, items) when is_list(items) do
Enum.reduce(items, r, fn({k,v}, acc) -> update(acc, k, v) end)
end
def update(%Cs{} = r, :changeset, nil) do
%Cs{r | changeset: nil, required: []}
end
def update(%Cs{} = r, :changeset, changeset) do
%Cs{r | changeset: changeset, required: changeset.required}
end
def update(%Cs{valid?: valid?} = r, :valid?, value) do
%Cs{r | valid?: valid? and value}
end
def update(%Cs{dependents: dependents} = r, :dependents, dependent) do
%Cs{r | dependents: dependents ++ [dependent]}
end
def update(%Cs{} = r, :errors, nil), do: r
def update(%Cs{errors: nil} = r, :errors, error) do
%Cs{r | errors: error}
end
def update(%Cs{errors: errors} = r, :errors, error) do
%Cs{r | errors: errors ++ error}
end
def set_data(%{data: data} = cs, params) do
struct(cs, data: struct(data, params))
end
def set_data(%{model: data} = cs, params) do
struct(cs, model: struct(data, params))
end
def get_data(%{data: data}), do: data
def get_data(%{model: data}), do: data
end