fix: include error context in top level of errors

This commit is contained in:
Zach Daniel 2023-04-03 23:28:55 -04:00
parent 6a13903673
commit 30309dac1d
5 changed files with 50 additions and 15 deletions

View file

@ -575,10 +575,17 @@ defmodule Ash.Error do
defp header(:framework), do: "Framework Error" defp header(:framework), do: "Framework Error"
defp header(:unknown), do: "Unknown Error" defp header(:unknown), do: "Unknown Error"
defp breadcrumb(nil), do: "" @doc false
defp breadcrumb([]), do: "" def breadcrumb(nil), do: ""
def breadcrumb([]), do: ""
defp breadcrumb(error_context) do def breadcrumb(error_context) do
"Context: " <> Enum.join(error_context, " > ") <> "\n" case Enum.filter(error_context, & &1) do
[] ->
""
bread_crumbs ->
"Context: " <> Enum.join(bread_crumbs, " > ") <> "\n"
end
end end
end end

View file

@ -8,12 +8,16 @@ defmodule Ash.Error.Forbidden do
defimpl Ash.ErrorKind do defimpl Ash.ErrorKind do
def id(_), do: Ash.UUID.generate() def id(_), do: Ash.UUID.generate()
def message(%{errors: errors, stacktraces?: stacktraces?}) when not is_nil(errors) do def message(%{errors: errors, stacktraces?: stacktraces?, error_context: error_context}) do
Ash.Error.error_messages(errors, nil, stacktraces?) messages = Ash.Error.error_messages(errors, nil, stacktraces?)
end
def message(%{errors: errors}) do case Ash.Error.breadcrumb(error_context) do
Ash.Error.error_descriptions(errors) "" ->
messages
error_context ->
error_context <> "\n" <> messages
end
end end
def code(_), do: "Forbidden" def code(_), do: "Forbidden"

View file

@ -9,8 +9,16 @@ defmodule Ash.Error.Framework do
def code(_), do: "framework" def code(_), do: "framework"
def message(%{errors: errors, stacktraces?: stacktraces?}) do def message(%{errors: errors, stacktraces?: stacktraces?, error_context: error_context}) do
Ash.Error.error_messages(errors, nil, stacktraces?) messages = Ash.Error.error_messages(errors, nil, stacktraces?)
case Ash.Error.breadcrumb(error_context) do
"" ->
messages
error_context ->
error_context <> "\n" <> messages
end
end end
end end
end end

View file

@ -9,8 +9,16 @@ defmodule Ash.Error.Invalid do
def code(_), do: "invalid" def code(_), do: "invalid"
def message(%{errors: errors, stacktraces?: stacktraces?}) do def message(%{errors: errors, stacktraces?: stacktraces?, error_context: error_context}) do
Ash.Error.error_messages(errors, nil, stacktraces?) messages = Ash.Error.error_messages(errors, nil, stacktraces?)
case Ash.Error.breadcrumb(error_context) do
"" ->
messages
error_context ->
error_context <> "\n" <> messages
end
end end
end end
end end

View file

@ -17,8 +17,16 @@ defmodule Ash.Error.Unknown do
def code(_), do: "unknown" def code(_), do: "unknown"
def message(%{errors: errors, stacktraces?: stacktraces?}) do def message(%{errors: errors, stacktraces?: stacktraces?, error_context: error_context}) do
Ash.Error.error_messages(errors, nil, stacktraces?) messages = Ash.Error.error_messages(errors, nil, stacktraces?)
case Ash.Error.breadcrumb(error_context) do
"" ->
messages
error_context ->
error_context <> "\n" <> messages
end
end end
end end
end end