class GraphQL::Batch::ExecutionStrategy
Public Instance Methods
execute(_, _, query)
click to toggle source
Calls superclass method
# File lib/graphql/batch/execution_strategy.rb, line 5 def execute(_, _, query) GraphQL::Batch.batch do as_promise_unless_resolved(super) end rescue GraphQL::InvalidNullError => err err.parent_error? || query.context.errors.push(err) nil end
Private Instance Methods
as_promise_unless_resolved(result)
click to toggle source
# File lib/graphql/batch/execution_strategy.rb, line 21 def as_promise_unless_resolved(result) all_promises = [] each_promise(result) do |obj, key, promise| obj[key] = nil all_promises << promise.then do |value| obj[key] = value as_promise_unless_resolved(value) end end return result if all_promises.empty? ::Promise.all(all_promises).then { result } end
each_promise(obj, &block)
click to toggle source
# File lib/graphql/batch/execution_strategy.rb, line 34 def each_promise(obj, &block) case obj when Array obj.each_with_index do |value, idx| each_promise_in_entry(obj, idx, value, &block) end when Hash obj.each do |key, value| each_promise_in_entry(obj, key, value, &block) end end end
each_promise_in_entry(obj, key, value) { |obj, key, value| ... }
click to toggle source
# File lib/graphql/batch/execution_strategy.rb, line 47 def each_promise_in_entry(obj, key, value, &block) if value.is_a?(::Promise) yield obj, key, value else each_promise(value, &block) end end