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?, #skip, #spawn_child

Constructor Details

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

Returns a new instance of FieldResolutionContext



197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# File 'lib/graphql/query/context.rb', line 197

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



194
195
196
# File 'lib/graphql/query/context.rb', line 194

def field
  @field
end

#irep_nodeObject (readonly) Also known as: selection

Returns the value of attribute irep_node



194
195
196
# File 'lib/graphql/query/context.rb', line 194

def irep_node
  @irep_node
end

#keyObject (readonly)

Returns the value of attribute key



194
195
196
# File 'lib/graphql/query/context.rb', line 194

def key
  @key
end

#parentObject (readonly)

Returns the value of attribute parent



194
195
196
# File 'lib/graphql/query/context.rb', line 194

def parent
  @parent
end

#parent_typeObject (readonly)

Returns the value of attribute parent_type



194
195
196
# File 'lib/graphql/query/context.rb', line 194

def parent_type
  @parent_type
end

#queryObject (readonly)

Returns the value of attribute query



194
195
196
# File 'lib/graphql/query/context.rb', line 194

def query
  @query
end

#schemaObject (readonly)

Returns the value of attribute schema



194
195
196
# File 'lib/graphql/query/context.rb', line 194

def schema
  @schema
end

#typeObject (readonly)

Returns the value of attribute type



194
195
196
# File 'lib/graphql/query/context.rb', line 194

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.



216
217
218
# File 'lib/graphql/query/context.rb', line 216

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.



216
217
218
# File 'lib/graphql/query/context.rb', line 216

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:



235
236
237
238
239
240
# File 'lib/graphql/query/context.rb', line 235

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:



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

def ast_node
  @irep_node.ast_node
end

#inspectObject



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

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

#pathObject



218
219
220
# File 'lib/graphql/query/context.rb', line 218

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



252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
# File 'lib/graphql/query/context.rb', line 252

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