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