class GraphQL::Execution::Interpreter::Runtime

def after_lazy(lazy_obj, owner:, field:, path:, scoped_context:, owner_object:, arguments:, eager: false, trace: true)

Returns:
  • (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