fix: only put keywords to be interpolated in message in error vars (#821)

* fix: only put keywords to be interpolated in message in error vars
---------

Co-authored-by: Zach Daniel <zachary.s.daniel@gmail.com>
This commit is contained in:
Alan Heywood 2024-01-09 09:08:17 +10:00 committed by GitHub
parent d617f42daf
commit dbb4a38ea3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 13 additions and 18 deletions

View file

@ -55,7 +55,11 @@ defmodule Ash.Error.Exception do
} }
end) end)
super(opts) super(opts) |> Map.update(:vars, [], &clean_vars/1)
end
defp clean_vars(vars) do
vars |> Kernel.||([]) |> Keyword.drop([:field, :message, :path])
end end
defoverridable exception: 1, message: 1 defoverridable exception: 1, message: 1

View file

@ -175,7 +175,7 @@ defmodule Ash.Type.Keyword do
{:ok, [{field, field_value} | result]} {:ok, [{field, field_value} | result]}
{:error, errors} -> {:error, errors} ->
{:error, Enum.map(errors, fn error -> [field: field, message: error[:message]] end)} {:error, Enum.map(errors, fn error -> Keyword.put(error, :field, field) end)}
end end
:error -> :error ->

View file

@ -154,7 +154,7 @@ defmodule Ash.Type.Map do
{:ok, Map.put(result, field, field_value)} {:ok, Map.put(result, field, field_value)}
{:error, errors} -> {:error, errors} ->
{:error, Enum.map(errors, fn error -> [field: field, message: error[:message]] end)} {:error, Enum.map(errors, fn error -> Keyword.put(error, :field, field) end)}
end end
:error -> :error ->

View file

@ -978,7 +978,6 @@ defmodule Ash.Test.CalculationTest do
|> Enum.map(& &1.active) |> Enum.map(& &1.active)
end end
@tag :focus
test "aggregates using calculations pass actor to calculations", %{ test "aggregates using calculations pass actor to calculations", %{
user1: user, user1: user,
actor1: actor, actor1: actor,

View file

@ -122,7 +122,7 @@ defmodule Type.KeywordTest do
changeset: nil, changeset: nil,
query: nil, query: nil,
error_context: [], error_context: [],
vars: [field: :foo, message: "field must be present", path: [:metadata]], vars: [],
path: [:metadata] path: [:metadata]
} }
] = changeset.errors ] = changeset.errors
@ -146,11 +146,7 @@ defmodule Type.KeywordTest do
changeset: nil, changeset: nil,
query: nil, query: nil,
error_context: [], error_context: [],
vars: [ vars: [min: 0],
field: :bar,
message: "must be more than or equal to %{min}",
path: [:metadata]
],
path: [:metadata] path: [:metadata]
} }
] = changeset.errors ] = changeset.errors
@ -200,7 +196,7 @@ defmodule Type.KeywordTest do
changeset: nil, changeset: nil,
query: nil, query: nil,
error_context: [], error_context: [],
vars: [field: :foo, message: "value must not be nil", path: [:metadata]], vars: [],
path: [:metadata] path: [:metadata]
} }
] = changeset.errors ] = changeset.errors

View file

@ -124,7 +124,7 @@ defmodule Type.MapTest do
changeset: nil, changeset: nil,
query: nil, query: nil,
error_context: [], error_context: [],
vars: [field: :foo, message: "field must be present", path: [:metadata]], vars: [],
path: [:metadata] path: [:metadata]
} }
] = changeset.errors ] = changeset.errors
@ -148,11 +148,7 @@ defmodule Type.MapTest do
changeset: nil, changeset: nil,
query: nil, query: nil,
error_context: [], error_context: [],
vars: [ vars: [min: 0],
field: :bar,
message: "must be more than or equal to %{min}",
path: [:metadata]
],
path: [:metadata] path: [:metadata]
} }
] = changeset.errors ] = changeset.errors
@ -202,7 +198,7 @@ defmodule Type.MapTest do
changeset: nil, changeset: nil,
query: nil, query: nil,
error_context: [], error_context: [],
vars: [field: :foo, message: "value must not be nil", path: [:metadata]], vars: [],
path: [:metadata] path: [:metadata]
} }
] = changeset.errors ] = changeset.errors