lib/graphql/batch/execution_strategy.rb in graphql-batch-0.2.5 vs lib/graphql/batch/execution_strategy.rb in graphql-batch-0.3.0
- old
+ new
@@ -1,34 +1,33 @@
module GraphQL::Batch
class ExecutionStrategy < GraphQL::Query::SerialExecution
- attr_accessor :disable_batching
-
def execute(_, _, query)
- as_promise(super).sync
+ GraphQL::Batch.batch do
+ as_promise_unless_resolved(super)
+ end
rescue GraphQL::InvalidNullError => err
err.parent_error? || query.context.errors.push(err)
nil
- ensure
- GraphQL::Batch::Executor.current.clear
end
- private
-
- def as_promise(result)
- GraphQL::Batch::Promise.resolve(as_promise_unless_resolved(result))
+ # Needed for MutationExecutionStrategy
+ def deep_sync(result) #:nodoc:
+ Promise.sync(as_promise_unless_resolved(result))
end
+ private
+
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 }
+ ::Promise.all(all_promises).then { result }
end
def each_promise(obj, &block)
case obj
when Array