mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 05:23:03 +12:00
fix: add a case for calculations as tuples in expr filters
This commit is contained in:
parent
cc5c1b69c0
commit
003ba3246b
2 changed files with 35 additions and 6 deletions
|
@ -1925,11 +1925,40 @@ defmodule Ash.Filter do
|
||||||
when is_tuple(args) and is_atom(function) do
|
when is_tuple(args) and is_atom(function) do
|
||||||
case get_function(function, context.resource, context.public?) do
|
case get_function(function, context.resource, context.public?) do
|
||||||
nil ->
|
nil ->
|
||||||
{:error,
|
case calculation(context, function) do
|
||||||
NoSuchAttributeOrRelationship.exception(
|
nil ->
|
||||||
attribute_or_relationship: function,
|
{:error,
|
||||||
resource: context.resource
|
NoSuchAttributeOrRelationship.exception(
|
||||||
)}
|
attribute_or_relationship: function,
|
||||||
|
resource: context.resource
|
||||||
|
)}
|
||||||
|
|
||||||
|
resource_calculation ->
|
||||||
|
{module, opts} = module_and_opts(resource_calculation.calculation)
|
||||||
|
|
||||||
|
with {:ok, args} <-
|
||||||
|
Ash.Query.validate_calculation_arguments(resource_calculation, args),
|
||||||
|
{:ok, calculation} <-
|
||||||
|
Calculation.new(
|
||||||
|
resource_calculation.name,
|
||||||
|
module,
|
||||||
|
opts,
|
||||||
|
resource_calculation.type,
|
||||||
|
args,
|
||||||
|
resource_calculation.filterable?,
|
||||||
|
resource_calculation.load
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Ash.Query.Ref{
|
||||||
|
attribute: calculation,
|
||||||
|
resource: context.resource,
|
||||||
|
relationship_path: context.relationship_path
|
||||||
|
}}
|
||||||
|
else
|
||||||
|
{:error, error} ->
|
||||||
|
{:error, error}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function_module ->
|
function_module ->
|
||||||
nested_statement = Tuple.to_list(args)
|
nested_statement = Tuple.to_list(args)
|
||||||
|
|
|
@ -710,7 +710,7 @@ defmodule Ash.Test.Filter.FilterTest do
|
||||||
|
|
||||||
test "with bad input" do
|
test "with bad input" do
|
||||||
User
|
User
|
||||||
|> new()
|
|> new(%{name: "fred"})
|
||||||
|> Api.create!()
|
|> Api.create!()
|
||||||
|
|
||||||
assert_raise(Ash.Error.Unknown, fn ->
|
assert_raise(Ash.Error.Unknown, fn ->
|
||||||
|
|
Loading…
Reference in a new issue