@@ -20,10 +20,10 @@ def fetch(ops)
2020 origin_set . select! { _1 [ TypeResolver ::TYPENAME_EXPORT_NODE . alias ] == op . if_type }
2121 end
2222
23- memo [ op ] = origin_set if origin_set . any ?
23+ memo [ op ] = origin_set unless origin_set . empty ?
2424 end
2525
26- if origin_sets_by_operation . any ?
26+ unless origin_sets_by_operation . empty ?
2727 query_document , variable_names = build_document (
2828 origin_sets_by_operation ,
2929 @executor . request . operation_name ,
@@ -51,61 +51,76 @@ def fetch(ops)
5151 # }"
5252 def build_document ( origin_sets_by_operation , operation_name = nil , operation_directives = nil )
5353 variable_defs = { }
54- query_fields = origin_sets_by_operation . map . with_index do |( op , origin_set ) , batch_index |
54+ fields_buffer = String . new
55+
56+ origin_sets_by_operation . each_with_index do |( op , origin_set ) , batch_index |
5557 variable_defs . merge! ( op . variables )
5658 resolver = @executor . request . supergraph . resolvers_by_version [ op . resolver ]
59+ fields_buffer << " " unless batch_index . zero?
5760
5861 if resolver . list?
59- arguments = resolver . arguments . map . with_index do |arg , i |
62+ fields_buffer << "_" << batch_index . to_s << "_result: " << resolver . field << "("
63+
64+ resolver . arguments . each_with_index do |arg , i |
65+ fields_buffer << "," unless i . zero?
6066 if arg . key?
6167 variable_name = "_#{ batch_index } _key_#{ i } " . freeze
6268 @variables [ variable_name ] = origin_set . map { arg . build ( _1 ) }
6369 variable_defs [ variable_name ] = arg . to_type_signature
64- " #{ arg . name } :$ #{ variable_name } "
70+ fields_buffer << arg . name << ":$" << variable_name
6571 else
66- " #{ arg . name } : #{ arg . value . print } "
72+ fields_buffer << arg . name << ":" << arg . value . print
6773 end
6874 end
6975
70- "_ #{ batch_index } _result: #{ resolver . field } ( #{ arguments . join ( "," ) } ) #{ op . selections } "
76+ fields_buffer << ") " << op . selections
7177 else
72- origin_set . map . with_index do |origin_obj , index |
73- arguments = resolver . arguments . map . with_index do |arg , i |
78+ origin_set . each_with_index do |origin_obj , index |
79+ fields_buffer << " " unless index . zero?
80+ fields_buffer << "_" << batch_index . to_s << "_" << index . to_s << "_result: " << resolver . field << "("
81+
82+ resolver . arguments . each_with_index do |arg , i |
83+ fields_buffer << "," unless i . zero?
7484 if arg . key?
7585 variable_name = "_#{ batch_index } _#{ index } _key_#{ i } " . freeze
7686 @variables [ variable_name ] = arg . build ( origin_obj )
7787 variable_defs [ variable_name ] = arg . to_type_signature
78- " #{ arg . name } :$ #{ variable_name } "
88+ fields_buffer << arg . name << ":$" << variable_name
7989 else
80- " #{ arg . name } : #{ arg . value . print } "
90+ fields_buffer << arg . name << ":" << arg . value . print
8191 end
8292 end
8393
84- "_ #{ batch_index } _ #{ index } _result: #{ resolver . field } ( #{ arguments . join ( "," ) } ) #{ op . selections } "
94+ fields_buffer << ") " << op . selections
8595 end
8696 end
8797 end
8898
89- doc = String . new ( QUERY_OP ) # << resolver fulfillment always uses query
99+ doc_buffer = String . new ( QUERY_OP ) # << resolver fulfillment always uses query
90100
91101 if operation_name
92- doc << " #{ operation_name } "
102+ doc_buffer << " " << operation_name
93103 origin_sets_by_operation . each_key do |op |
94- doc << "_#{ op . step } "
104+ doc_buffer << "_" << op . step . to_s
95105 end
96106 end
97107
98- if variable_defs . any?
99- doc << "(#{ variable_defs . map { |k , v | "$#{ k } :#{ v } " } . join ( "," ) } )"
108+ unless variable_defs . empty?
109+ doc_buffer << "("
110+ variable_defs . each_with_index do |( k , v ) , i |
111+ doc_buffer << "," unless i . zero?
112+ doc_buffer << "$" << k << ":" << v
113+ end
114+ doc_buffer << ")"
100115 end
101116
102117 if operation_directives
103- doc << " #{ operation_directives } "
118+ doc_buffer << " " << operation_directives << " "
104119 end
105120
106- doc << "{ #{ query_fields . join ( " " ) } }"
121+ doc_buffer << "{ " << fields_buffer << " }"
107122
108- return doc , variable_defs . keys . tap do |names |
123+ return doc_buffer , variable_defs . keys . tap do |names |
109124 names . reject! { @variables . key? ( _1 ) }
110125 end
111126 end
@@ -120,10 +135,11 @@ def merge_results!(origin_sets_by_operation, raw_result)
120135 origin_set . map . with_index { |_ , index | raw_result [ "_#{ batch_index } _#{ index } _result" ] }
121136 end
122137
123- next unless results &. any ?
138+ next if results . nil? || results . empty ?
124139
125140 origin_set . each_with_index do |origin_obj , index |
126- origin_obj . merge! ( results [ index ] ) if results [ index ]
141+ result = results [ index ]
142+ origin_obj . merge! ( result ) if result
127143 end
128144 end
129145 end
@@ -132,7 +148,7 @@ def merge_results!(origin_sets_by_operation, raw_result)
132148 def extract_errors! ( origin_sets_by_operation , errors )
133149 ops = origin_sets_by_operation . keys
134150 origin_sets = origin_sets_by_operation . values
135- pathed_errors_by_op_index_and_object_id = { }
151+ pathed_errors_by_op_index_and_object_id = Hash . new { | h , k | h [ k ] = { } }
136152
137153 errors_result = errors . each_with_object ( [ ] ) do |err , memo |
138154 err . delete ( "locations" )
@@ -151,8 +167,8 @@ def extract_errors!(origin_sets_by_operation, errors)
151167 end
152168
153169 if origin_obj
154- by_op_index = pathed_errors_by_op_index_and_object_id [ result_alias [ 1 ] . to_i ] ||= { }
155- by_object_id = by_op_index [ origin_obj . object_id ] ||= [ ]
170+ pathed_errors_by_op_index = pathed_errors_by_op_index_and_object_id [ result_alias [ 1 ] . to_i ]
171+ by_object_id = pathed_errors_by_op_index [ origin_obj . object_id ] ||= [ ]
156172 by_object_id << err
157173 next
158174 end
@@ -162,9 +178,9 @@ def extract_errors!(origin_sets_by_operation, errors)
162178 memo << err
163179 end
164180
165- if pathed_errors_by_op_index_and_object_id . any ?
181+ unless pathed_errors_by_op_index_and_object_id . empty ?
166182 pathed_errors_by_op_index_and_object_id . each do |op_index , pathed_errors_by_object_id |
167- repath_errors! ( pathed_errors_by_object_id , ops . dig ( op_index , " path" ) )
183+ repath_errors! ( pathed_errors_by_object_id , ops [ op_index ] . path )
168184 errors_result . push ( *pathed_errors_by_object_id . each_value )
169185 end
170186 end
@@ -180,7 +196,7 @@ def repath_errors!(pathed_errors_by_object_id, forward_path, current_path=[], ro
180196 current_path . push ( forward_path . shift )
181197 scope = root [ current_path . last ]
182198
183- if forward_path . any ? && scope . is_a? ( Array )
199+ if ! forward_path . empty ? && scope . is_a? ( Array )
184200 scope . each_with_index do |element , index |
185201 inner_elements = element . is_a? ( Array ) ? element . flatten : [ element ]
186202 inner_elements . each do |inner_element |
@@ -190,7 +206,7 @@ def repath_errors!(pathed_errors_by_object_id, forward_path, current_path=[], ro
190206 end
191207 end
192208
193- elsif forward_path . any ?
209+ elsif ! forward_path . empty ?
194210 repath_errors! ( pathed_errors_by_object_id , forward_path , current_path , scope )
195211
196212 elsif scope . is_a? ( Array )
0 commit comments