Sha256: 5530956316dc756653cc831428249eed1a4cf216d6cf04bea9a7760cf264602a

Contents?: true

Size: 1.9 KB

Versions: 2

Compression:

Stored size: 1.9 KB

Contents

require "graphql"
require "promise.rb"

module GraphQL
  module Batch
    BrokenPromiseError = ::Promise::BrokenError
    class NoExecutorError < StandardError; end

    def self.batch(executor_class: GraphQL::Batch::Executor)
      begin
        GraphQL::Batch::Executor.start_batch(executor_class)
        ::Promise.sync(yield)
      ensure
        GraphQL::Batch::Executor.end_batch
      end
    end

    def self.use(schema_defn, executor_class: GraphQL::Batch::Executor)
      # Support 1.10+ which passes the class instead of the definition proxy
      schema = schema_defn.is_a?(Class) ? schema_defn : schema_defn.target
      current_gem_version = Gem::Version.new(GraphQL::VERSION)
      if current_gem_version >= Gem::Version.new("1.6.0")
        instrumentation = GraphQL::Batch::SetupMultiplex.new(schema, executor_class: executor_class)
        schema_defn.instrument(:multiplex, instrumentation)
        if schema.mutation
          if current_gem_version >= Gem::Version.new('1.9.0.pre3') &&
              (schema.mutation.is_a?(Class) || schema.mutation.metadata[:type_class])
            require_relative "batch/mutation_field_extension"
            schema.mutation.fields.each do |name, f|
              field = f.respond_to?(:type_class) ? f.type_class : f.metadata[:type_class]
              field.extension(GraphQL::Batch::MutationFieldExtension)
            end
          else
            schema_defn.instrument(:field, instrumentation)
          end
        end
      else
        instrumentation = GraphQL::Batch::Setup.new(schema, executor_class: executor_class)
        schema_defn.instrument(:query, instrumentation)
        schema_defn.instrument(:field, instrumentation)
      end
      schema_defn.lazy_resolve(::Promise, :sync)
    end
  end
end

require_relative "batch/version"
require_relative "batch/loader"
require_relative "batch/executor"
require_relative "batch/setup"
require_relative "batch/setup_multiplex"

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
graphql-batch-0.4.3 lib/graphql/batch.rb
graphql-batch-0.4.2 lib/graphql/batch.rb