class GraphQL::Execution::Interpreter::Runtime
def after_lazy(lazy_obj, owner:, field:, path:, scoped_context:, owner_object:, arguments:, eager: false, trace: true)
-
(GraphQL::Execution::Lazy, Object)
- If loading `object` will be deferred, it's a wrapper over it.
Parameters:
-
trace
(Boolean
) -- If `false`, don't wrap this with field tracing -
eager
(Boolean
) -- Set to `true` for mutation root fields only -
field
(GraphQL::Schema::Field
) -- -
path
(Array
) -- -
obj
(Object
) -- Some user-returned value that may want to be batched
def after_lazy(lazy_obj, owner:, field:, path:, scoped_context:, owner_object:, arguments:, eager: false, trace: true) @interpreter_context[:current_object] = owner_object @interpreter_context[:current_arguments] = arguments @interpreter_context[:current_path] = path @interpreter_context[:current_field] = field if schema.lazy?(lazy_obj) lazy = GraphQL::Execution::Lazy.new(path: path, field: field) do @interpreter_context[:current_path] = path @interpreter_context[:current_field] = field @interpreter_context[:current_object] = owner_object @interpreter_context[:current_arguments] = arguments context.scoped_context = scoped_context # Wrap the execution of _this_ method with tracing, # but don't wrap the continuation below inner_obj = begin query.with_error_handling do if trace query.trace("execute_field_lazy", {owner: owner, field: field, path: path, query: query, object: owner_object, arguments: arguments}) do schema.sync_lazy(lazy_obj) end else schema.sync_lazy(lazy_obj) end end rescue GraphQL::ExecutionError, GraphQL::UnauthorizedError => err yield(err) end after_lazy(inner_obj, owner: owner, field: field, path: path, scoped_context: context.scoped_context, owner_object: owner_object, arguments: arguments, eager: eager) do |really_inner_obj| yield(really_inner_obj) end end if eager lazy.value else write_in_response(path, lazy) lazy end else yield(lazy_obj) end end