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)
super(opts)
super(opts) |> Map.update(:vars, [], &clean_vars/1)
end
defp clean_vars(vars) do
vars |> Kernel.||([]) |> Keyword.drop([:field, :message, :path])
end
defoverridable exception: 1, message: 1

View file

@ -175,7 +175,7 @@ defmodule Ash.Type.Keyword do
{:ok, [{field, field_value} | result]}
{: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
:error ->

View file

@ -154,7 +154,7 @@ defmodule Ash.Type.Map do
{:ok, Map.put(result, field, field_value)}
{: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
:error ->

View file

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

View file

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

View file

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