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.



203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
# File 'lib/graphql/query/context.rb', line 203

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.



200
201
202
# File 'lib/graphql/query/context.rb', line 200

def field
  @field
end

#irep_nodeObject (readonly) Also known as: selection

Returns the value of attribute irep_node.



200
201
202
# File 'lib/graphql/query/context.rb', line 200

def irep_node
  @irep_node
end

#keyObject (readonly)

Returns the value of attribute key.



200
201
202
# File 'lib/graphql/query/context.rb', line 200

def key
  @key
end

#parentObject (readonly)

Returns the value of attribute parent.



200
201
202
# File 'lib/graphql/query/context.rb', line 200

def parent
  @parent
end

#parent_typeObject (readonly)

Returns the value of attribute parent_type.



200
201
202
# File 'lib/graphql/query/context.rb', line 200

def parent_type
  @parent_type
end

#queryObject (readonly)

Returns the value of attribute query.



200
201
202
# File 'lib/graphql/query/context.rb', line 200

def query
  @query
end

#schemaObject (readonly)

Returns the value of attribute schema.



200
201
202
# File 'lib/graphql/query/context.rb', line 200

def schema
  @schema
end

#typeObject (readonly)

Returns the value of attribute type.



200
201
202
# File 'lib/graphql/query/context.rb', line 200

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.



222
223
224
# File 'lib/graphql/query/context.rb', line 222

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.



222
223
224
# File 'lib/graphql/query/context.rb', line 222

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:



241
242
243
244
245
246
# File 'lib/graphql/query/context.rb', line 241

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:



234
235
236
# File 'lib/graphql/query/context.rb', line 234

def ast_node
  @irep_node.ast_node
end

#inspectObject



248
249
250
# File 'lib/graphql/query/context.rb', line 248

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

#pathObject



224
225
226
# File 'lib/graphql/query/context.rb', line 224

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



258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
# File 'lib/graphql/query/context.rb', line 258

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