Sha256: 04458bc466854aa9e7049b4c572b419b2d37bf3d4f4d940470e689120aedeaf1

Contents?: true

Size: 1.06 KB

Versions: 5

Compression:

Stored size: 1.06 KB

Contents

module GraphQL::Batch
  class Setup
    class << self
      def start_batching(executor_class)
        GraphQL::Batch::Executor.start_batch(executor_class)
      end

      def end_batching
        GraphQL::Batch::Executor.end_batch
      end

      def instrument_field(schema, type, field)
        return field unless type == schema.mutation
        old_resolve_proc = field.resolve_proc
        field.redefine do
          resolve ->(obj, args, ctx) {
            GraphQL::Batch::Executor.current.clear
            begin
              ::Promise.sync(old_resolve_proc.call(obj, args, ctx))
            ensure
              GraphQL::Batch::Executor.current.clear
            end
          }
        end
      end
    end

    def initialize(schema, executor_class:)
      @schema = schema
      @executor_class = executor_class
    end

    def before_query(query)
      Setup.start_batching(@executor_class)
    end

    def after_query(query)
      Setup.end_batching
    end

    def instrument(type, field)
      Setup.instrument_field(@schema, type, field)
    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
graphql-batch-0.4.3 lib/graphql/batch/setup.rb
graphql-batch-0.4.2 lib/graphql/batch/setup.rb
graphql-batch-0.4.1 lib/graphql/batch/setup.rb
graphql-batch-edge-0.4.0 lib/graphql/batch/setup.rb
graphql-batch-0.4.0 lib/graphql/batch/setup.rb