Sha256: 2a9a2bc29fdcec123a36c8347d352823d2127a499919924abc97997af9eb89b9
Contents?: true
Size: 1.7 KB
Versions: 1
Compression:
Stored size: 1.7 KB
Contents
module GraphQL::Batch class ExecutionStrategy < GraphQL::Query::SerialExecution 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 # 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 } end 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 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 class FieldResolution < GraphQL::Query::SerialExecution::FieldResolution def get_finished_value(raw_value) if raw_value.is_a?(::Promise) raw_value.then(->(result) { super(result) }, lambda do |error| error.is_a?(GraphQL::ExecutionError) ? super(error) : raise(error) end) else super end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
graphql-batch-0.3.0 | lib/graphql/batch/execution_strategy.rb |