mirror of
https://github.com/ash-project/ash.git
synced 2024-09-19 21:13:10 +12:00
improvement: add Ash.Error.error_descriptions
This commit is contained in:
parent
828bd9c560
commit
bfb67a4800
2 changed files with 22 additions and 0 deletions
|
@ -271,6 +271,8 @@ defmodule Ash.Actions.Update do
|
|||
with %{valid?: true} = changeset <- Ash.Changeset.validate_multitenancy(changeset),
|
||||
%{valid?: true} = changeset <- changeset(changeset, domain, action, opts),
|
||||
%{valid?: true} = changeset <- authorize(changeset, opts),
|
||||
%{valid?: true} = changeset <-
|
||||
Ash.Changeset.add_atomic_validations(changeset, opts[:actor], []),
|
||||
{:ok, result, instructions} <- commit(changeset, domain, opts) do
|
||||
add_notifications(
|
||||
changeset.resource,
|
||||
|
|
|
@ -86,6 +86,26 @@ defmodule Ash.Error do
|
|||
end
|
||||
end
|
||||
|
||||
def error_descriptions(errors) do
|
||||
errors
|
||||
|> to_error_class()
|
||||
|> Map.get(:errors)
|
||||
|> Enum.group_by(& &1.class)
|
||||
|> Enum.sort_by(fn {group, _} ->
|
||||
Enum.find_index([:forbidden, :invalid, :framework, :unknown], &(&1 == group))
|
||||
end)
|
||||
|> Enum.map_join("\n\n", fn {class, class_errors} ->
|
||||
header = header(class) <> "\n\n"
|
||||
|
||||
header <> Enum.map_join(class_errors, "\n", &"* #{Exception.message(&1)}")
|
||||
end)
|
||||
end
|
||||
|
||||
defp header(:forbidden), do: "Forbidden"
|
||||
defp header(:invalid), do: "Input Invalid"
|
||||
defp header(:framework), do: "Framework Error"
|
||||
defp header(:unknown), do: "Unknown Error"
|
||||
|
||||
def ash_error?(value), do: splode_error?(value, __MODULE__)
|
||||
|
||||
def set_path(%struct{errors: errors} = container, path)
|
||||
|
|
Loading…
Reference in a new issue