Class: GraphQL::Query::Context::FieldResolutionContext

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
SharedMethods, Tracing::Traceable
Defined in:
lib/graphql/query/context.rb

Instance Attribute Summary collapse

Attributes included from SharedMethods

#object, #skipped, #value

Instance Method Summary collapse

Methods included from Tracing::Traceable

#trace

Methods included from SharedMethods

#backtrace, #delete, #execution_errors, #invalid_null?, #lookahead, #skip, #spawn_child

Constructor Details

#initialize(context, key, irep_node, parent, object) ⇒ FieldResolutionContext

Returns a new instance of FieldResolutionContext.



231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
# File 'lib/graphql/query/context.rb', line 231

def initialize(context, key, irep_node, parent, object)
  @context = context
  @key = key
  @parent = parent
  @object = object
  @irep_node = irep_node
  @field = irep_node.definition
  @parent_type = irep_node.owner_type
  @type = field.type
  # This is needed constantly, so set it ahead of time:
  @query = context.query
  @schema = context.schema
  @tracers = @query.tracers
  # This hack flag is required by ConnectionResolve
  @wrapped_connection = false
  @wrapped_object = false
end

Instance Attribute Details

#fieldObject (readonly)

Returns the value of attribute field.



228
229
230
# File 'lib/graphql/query/context.rb', line 228

def field
  @field
end

#irep_nodeObject (readonly) Also known as: selection

Returns the value of attribute irep_node.



228
229
230
# File 'lib/graphql/query/context.rb', line 228

def irep_node
  @irep_node
end

#keyObject (readonly)

Returns the value of attribute key.



228
229
230
# File 'lib/graphql/query/context.rb', line 228

def key
  @key
end

#parentObject (readonly)

Returns the value of attribute parent.



228
229
230
# File 'lib/graphql/query/context.rb', line 228

def parent
  @parent
end

#parent_typeObject (readonly)

Returns the value of attribute parent_type.



228
229
230
# File 'lib/graphql/query/context.rb', line 228

def parent_type
  @parent_type
end

#queryObject (readonly)

Returns the value of attribute query.



228
229
230
# File 'lib/graphql/query/context.rb', line 228

def query
  @query
end

#schemaObject (readonly)

Returns the value of attribute schema.



228
229
230
# File 'lib/graphql/query/context.rb', line 228

def schema
  @schema
end

#typeObject (readonly)

Returns the value of attribute type.



228
229
230
# File 'lib/graphql/query/context.rb', line 228

def type
  @type
end

#wrapped_connectionObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



250
251
252
# File 'lib/graphql/query/context.rb', line 250

def wrapped_connection
  @wrapped_connection
end

#wrapped_objectObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



250
251
252
# File 'lib/graphql/query/context.rb', line 250

def wrapped_object
  @wrapped_object
end

Instance Method Details

#add_error(error) ⇒ void

This method returns an undefined value.

Add error to current field resolution.

Parameters:



269
270
271
272
273
274
# File 'lib/graphql/query/context.rb', line 269

def add_error(error)
  super
  error.ast_node ||= irep_node.ast_node
  error.path ||= path
  nil
end

#ast_nodeGraphQL::Language::Nodes::Field

Returns The AST node for the currently-executing field.

Returns:



262
263
264
# File 'lib/graphql/query/context.rb', line 262

def ast_node
  @irep_node.ast_node
end

#inspectObject



276
277
278
# File 'lib/graphql/query/context.rb', line 276

def inspect
  "#<GraphQL Context @ #{irep_node.owner_type.name}.#{field.name}>"
end

#pathObject



252
253
254
# File 'lib/graphql/query/context.rb', line 252

def path
  @path ||= @parent.path.dup << @key
end

#value=(new_value) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Set a new value for this field in the response. It may be updated after resolving a Lazy. If it is Execute::PROPAGATE_NULL, tell the owner to propagate null. If it’s Execute::Execution::SKIP, remove this field result from its parent

Parameters:

  • new_value (Any)

    The GraphQL-ready value



286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
# File 'lib/graphql/query/context.rb', line 286

def value=(new_value)
  case new_value
  when GraphQL::Execution::Execute::PROPAGATE_NULL, nil
    @invalid_null = true
    @value = nil
    if @type.kind.non_null?
      @parent.received_null_child
    end
  when GraphQL::Execution::Execute::SKIP
    @parent.skipped = true
    @parent.delete(self)
  else
    @value = new_value
  end
end