File tree Expand file tree Collapse file tree 2 files changed +43
-2
lines changed
Expand file tree Collapse file tree 2 files changed +43
-2
lines changed Original file line number Diff line number Diff line change @@ -1005,18 +1005,32 @@ defmodule Pacer.Workflow do
10051005 case module . __graph__ ( :resolver , vertex ) do
10061006 { :field , resolver } when is_function ( resolver , 1 ) ->
10071007 metadata = % { field: vertex , workflow: workflow . __struct__ }
1008+ resolver_args = Map . take ( workflow , [ vertex | module . __graph__ ( :dependencies , vertex ) ] )
10081009
10091010 :telemetry . span ( [ :pacer , :execute_vertex ] , metadata , fn ->
1010- result = Map . put ( workflow , vertex , resolver . ( workflow ) )
1011+ result =
1012+ Map . put (
1013+ workflow ,
1014+ vertex ,
1015+ resolver . ( resolver_args )
1016+ )
1017+
10111018 { result , metadata }
10121019 end )
10131020
10141021 { :batch , [ { field , resolver } ] } ->
10151022 metadata = % { field: field , workflow: workflow . __struct__ }
10161023
10171024 try do
1025+ resolver_args =
1026+ Map . take ( workflow , [ field | module . __graph__ ( :batched_field_dependencies , field ) ] )
1027+
10181028 :telemetry . span ( [ :pacer , :execute_vertex ] , metadata , fn ->
1019- { Map . put ( workflow , field , resolver . ( workflow ) ) , metadata }
1029+ { Map . put (
1030+ workflow ,
1031+ field ,
1032+ resolver . ( resolver_args )
1033+ ) , metadata }
10201034 end )
10211035 catch
10221036 _kind , _error ->
Original file line number Diff line number Diff line change @@ -290,6 +290,33 @@ defmodule Pacer.WorkflowTest do
290290 refute Map . has_key? ( result , :field_with_default )
291291 end
292292
293+ test "resolver functions only receive their explicit dependencies and the current field when invoked" do
294+ defmodule ResolverInputSizeTest do
295+ use Pacer.Workflow
296+
297+ graph do
298+ field ( :a , default: 1 )
299+ field ( :b , resolver: & __MODULE__ . resolve_b / 1 , dependencies: [ :a ] )
300+ field ( :c , resolver: & __MODULE__ . resolve_c / 1 , dependencies: [ :a , :b ] )
301+ end
302+
303+ def resolve_b ( args ) do
304+ assert map_size ( args ) == 2
305+ assert Map . has_key? ( args , :a )
306+ assert Map . has_key? ( args , :b )
307+ end
308+
309+ def resolve_c ( args ) do
310+ assert map_size ( args ) == 3
311+ assert Map . has_key? ( args , :a )
312+ assert Map . has_key? ( args , :b )
313+ assert Map . has_key? ( args , :c )
314+ end
315+ end
316+
317+ Pacer.Workflow . execute ( ResolverInputSizeTest )
318+ end
319+
293320 test "field defaults" do
294321 assert % TestGraph {
295322 field_a: % FieldNotSet { } ,
You can’t perform that action at this time.
0 commit comments