mirror of
https://github.com/ash-project/ash_graphql.git
synced 2024-09-19 21:03:09 +12:00
b9e7848633
* fix: error handling list of atoms * Update lib/default_error_handler.ex --------- Co-authored-by: Zach Daniel <zachary.s.daniel@gmail.com>
36 lines
954 B
Elixir
36 lines
954 B
Elixir
defmodule AshGraphql.DefaultErrorHandler do
|
|
@moduledoc "Replaces any text in message or short_message with variables"
|
|
|
|
def handle_error(
|
|
%{message: message, short_message: short_message, vars: vars} = error,
|
|
_context
|
|
) do
|
|
%{
|
|
error
|
|
| message: replace_vars(message, vars),
|
|
short_message: replace_vars(short_message, vars)
|
|
}
|
|
end
|
|
|
|
def handle_error(other, _), do: other
|
|
|
|
defp replace_vars(string, vars) do
|
|
vars =
|
|
if is_map(vars) do
|
|
vars
|
|
else
|
|
List.wrap(vars)
|
|
end
|
|
|
|
Enum.reduce(vars, string, fn {key, value}, acc ->
|
|
if String.contains?(acc, "%{#{key}}") do
|
|
String.replace(acc, "%{#{key}}", stringified_value(value))
|
|
else
|
|
acc
|
|
end
|
|
end)
|
|
end
|
|
|
|
def stringified_value(value) when is_list(value), do: "[#{value |> Enum.map(&stringified_value(&1)) |> Enum.join(", ")}]"
|
|
def stringified_value(value), do: to_string(value)
|
|
end
|