lib/batch_loader/graphql.rb in batch-loader-1.4.1 vs lib/batch_loader/graphql.rb in batch-loader-1.5.0
- old
+ new
@@ -2,22 +2,42 @@
class BatchLoader
class GraphQL
def self.use(schema_definition)
schema_definition.lazy_resolve(BatchLoader::GraphQL, :sync)
- # for graphql gem versions <= 1.8.6 which work with BatchLoader instead of BatchLoader::GraphQL
- schema_definition.instrument(:field, self)
+
+ # in cases when BatchLoader is being used instead of BatchLoader::GraphQL
+ if schema_definition.respond_to?(:interpreter?) && schema_definition.interpreter?
+ schema_definition.tracer(self)
+ else
+ schema_definition.instrument(:field, self)
+ end
end
+ def self.trace(event, _data)
+ if event == 'execute_field'
+ result = yield
+ result.respond_to?(:__sync) ? wrap_with_warning(result) : result
+ else
+ yield
+ end
+ end
+
def self.instrument(type, field)
old_resolve_proc = field.resolve_proc
new_resolve_proc = ->(object, arguments, context) do
result = old_resolve_proc.call(object, arguments, context)
- result.respond_to?(:__sync) ? BatchLoader::GraphQL.wrap(result) : result
+ result.respond_to?(:__sync) ? wrap_with_warning(result) : result
end
field.redefine { resolve(new_resolve_proc) }
end
+
+ def self.wrap_with_warning(batch_loader)
+ warn "DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver."
+ wrap(batch_loader)
+ end
+ private_class_method :wrap_with_warning
def self.wrap(batch_loader)
BatchLoader::GraphQL.new.tap do |graphql|
graphql.batch_loader = batch_loader
end