41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
# File 'lib/graphql/execution/batching/field_compatibility.rb', line 41
def resolve_batch(frs, objects, context, kwargs)
if @batch_mode && !:direct_send.equal?(@batch_mode)
return super
end
if !@resolver_class
maybe_err = resolve_all_load_arguments(frs, self, kwargs, self, context)
if maybe_err
return maybe_err
end
end
if .include?(:lookahead)
if kwargs.frozen?
kwargs = kwargs.dup
end
kwargs[:lookahead] = Execution::Lookahead.new(
query: context.query,
ast_nodes: frs.ast_nodes || Array(frs.ast_node),
field: self,
)
end
if .include?(:ast_node)
if kwargs.frozen?
kwargs = kwargs.dup
end
kwargs[:ast_node] = frs.ast_node
end
if @owner.method_defined?(@resolver_method)
results = []
frs.selections_step.graphql_objects.each_with_index do |obj_inst, idx|
if frs.object_is_authorized[idx]
if dynamic_introspection
obj_inst = @owner.wrap(obj_inst, context)
end
results << with_extensions(obj_inst, kwargs, context) do |obj, ruby_kwargs|
if ruby_kwargs.empty?
obj.public_send(@resolver_method)
else
obj.public_send(@resolver_method, **ruby_kwargs)
end
end
end
end
results
elsif @resolver_class
objects.map do |o|
resolver_inst_kwargs = kwargs.dup
resolver_inst = @resolver_class.new(object: o, context: context, field: self)
maybe_err = resolve_all_load_arguments(frs, resolver_inst, resolver_inst_kwargs, self, context)
if maybe_err
next maybe_err
end
resolver_inst_kwargs = if @resolver_class < Schema::HasSingleInputArgument
resolver_inst_kwargs[:input]
else
resolver_inst_kwargs
end
with_extensions(o, resolver_inst_kwargs, context) do |obj, ruby_kwargs|
resolver_inst.object = obj
resolver_inst.prepared_arguments = ruby_kwargs
is_authed, new_return_value = resolver_inst.authorized?(**ruby_kwargs)
if frs.runner.resolves_lazies && frs.runner.schema.lazy?(is_authed)
is_authed, new_return_value = frs.runner.schema.sync_lazy(is_authed)
end
if is_authed
resolver_inst.call_resolve(ruby_kwargs)
else
new_return_value
end
end
rescue RuntimeError => err
err
rescue StandardError => stderr
begin
context.query.handle_or_reraise(stderr)
rescue GraphQL::ExecutionError => ex_err
ex_err
end
end
elsif objects.first.is_a?(Hash)
objects.map { |o| o[method_sym] || o[graphql_name] }
elsif objects.first.is_a?(Interpreter::RawValue)
objects
else
if extensions.empty?
objects.map { |o| o.public_send(@method_sym)}
else
results = []
frs.selections_step.graphql_objects.each_with_index do |obj_inst, idx|
if frs.object_is_authorized[idx]
results << with_extensions(obj_inst, EmptyObjects::EMPTY_HASH, context) do |obj, arguments|
if arguments.empty?
obj.object.public_send(@method_sym)
else
obj.object.public_send(@method_sym, **arguments)
end
end
end
end
results
end
end
end
|