88 class SimpleBreadthRuntime < GraphQL ::Execution ::Interpreter ::Runtime
99 class BreadthObject < GraphQL ::Execution ::Interpreter ::Runtime ::GraphQLResultHash
1010 attr_accessor :breadth_index
11+ attr_accessor :results_by_key
12+
13+ def collect_result ( result_name , result_value )
14+ results_by_key [ result_name ] [ breadth_index ] = result_value
15+ true
16+ end
1117 end
1218
1319 def initialize ( query :)
@@ -22,26 +28,24 @@ def initialize(query:)
2228 @breadth_results_by_key = { }
2329 end
2430
25- def run
26- result = nil
31+ def run ( &block )
2732 query . current_trace . execute_multiplex ( multiplex : query . multiplex ) do
28- query . current_trace . execute_query ( query : query ) do
29- result = yield
30- end
33+ query . current_trace . execute_query ( query : query , &block )
3134 end
32- result
3335 ensure
3436 delete_all_interpreter_context
3537 end
3638
3739 def evaluate_breadth_selection ( objects , parent_type , node )
3840 result_key = node . alias || node . name
3941 @breadth_results_by_key [ result_key ] = Array . new ( objects . size )
42+
4043 objects . each_with_index do |object , index |
4144 app_value = parent_type . wrap ( object , query . context )
4245 breadth_object = BreadthObject . new ( nil , parent_type , app_value , nil , false , node . selections , false , node , nil , nil )
4346 breadth_object . ordered_result_keys = [ ]
4447 breadth_object . breadth_index = index
48+ breadth_object . results_by_key = @breadth_results_by_key
4549
4650 state = get_current_runtime_state
4751 state . current_result_name = nil
@@ -53,11 +57,6 @@ def evaluate_breadth_selection(objects, parent_type, node)
5357
5458 @breadth_results_by_key [ result_key ]
5559 end
56-
57- def exit_with_inner_result? ( inner_result , result_key , breadth_object )
58- @breadth_results_by_key [ result_key ] [ breadth_object . breadth_index ] = inner_result
59- true
60- end
6160 end
6261
6362 class PassthroughLoader < GraphQL ::Batch ::Loader
@@ -169,6 +168,14 @@ def args(a:, b:)
169168 "#{ a } #{ b } "
170169 end
171170
171+ field :valid_args , String do |f |
172+ f . argument :a , String , validates : { length : { is : 1 } }
173+ end
174+
175+ def valid_args ( a :)
176+ a
177+ end
178+
172179 field :range , String do |f |
173180 f . argument :input , RangeInput
174181 end
@@ -268,6 +275,13 @@ def test_maps_basic_arguments_with_variables
268275 assert_equal [ "fizzbuzz" ] , result
269276 end
270277
278+ def test_maps_invalidated_arguments
279+ doc = %|query { validArgs(a: "boo") }|
280+ result = map_breadth_objects ( [ { } ] , doc )
281+ assert result . first . is_a? ( GraphQL ::ExecutionError )
282+ assert_equal "a is the wrong length (should be 1)" , result . first . message
283+ end
284+
271285 def test_maps_prepared_input_object
272286 doc = %|{ range(input: { min: 1, max: 2 }) }|
273287 result = map_breadth_objects ( [ { } ] , doc )
0 commit comments