Class: GraphQL::InternalRepresentation::Node

Inherits:
Object
  • Object
show all
Defined in:
lib/graphql/internal_representation/node.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parent:, ast_node: nil, return_type: nil, name: nil, definition_name: nil, definitions: {}, children: {}, spreads: [], directives: Set.new) ⇒ Node

Returns a new instance of Node.



6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/graphql/internal_representation/node.rb', line 6

def initialize(parent:, ast_node: nil, return_type: nil, name: nil, definition_name: nil, definitions: {}, children: {}, spreads: [], directives: Set.new)
  # Make sure these are kept in sync with #dup
  @ast_node = ast_node
  @return_type = return_type
  @name = name
  @definition_name = definition_name
  @parent = parent
  @definitions = definitions
  @children = children
  @spreads = spreads
  @directives = directives
end

Instance Attribute Details

#ast_nodeGraphQL::Language::Nodes::AbstractNode (readonly)

Returns The AST node (or one of the nodes) where this was derived from.

Returns:



53
54
55
# File 'lib/graphql/internal_representation/node.rb', line 53

def ast_node
  @ast_node
end

#childrenArray<GraphQL::Query::Node> (readonly)

Returns:

  • (Array<GraphQL::Query::Node>)


59
60
61
# File 'lib/graphql/internal_representation/node.rb', line 59

def children
  @children
end

#definition_nameString (readonly)

Returns the name for this node’s definition (#name may be a field’s alias, this is always the name).

Returns:

  • (String)

    the name for this node’s definition (#name may be a field’s alias, this is always the name)



28
29
30
# File 'lib/graphql/internal_representation/node.rb', line 28

def definition_name
  @definition_name
end

#definitionsHash<GraphQL::BaseType => GraphQL::Field> (readonly)

A cache of type-field pairs for executing & analyzing this node

{

person(id: 1) {
  firstName # => defined type is person
}

} {

node(id: $nodeId) {
  ... on Nameable {
    firstName # => defined type is Nameable
  }
}

}

Examples:

On-type from previous return value

On-type from explicit type condition

Returns:



47
48
49
# File 'lib/graphql/internal_representation/node.rb', line 47

def definitions
  @definitions
end

#directivesSet<GraphQL::Language::Nodes::Directive> (readonly)

These are the compiled directives from fragment spreads, inline fragments, and the field itself



25
26
27
# File 'lib/graphql/internal_representation/node.rb', line 25

def directives
  @directives
end

#nameString (readonly)

Returns the name to use for the result in the response hash.

Returns:

  • (String)

    the name to use for the result in the response hash



50
51
52
# File 'lib/graphql/internal_representation/node.rb', line 50

def name
  @name
end

#parentGraphQL::InternalRepresentation::Node (readonly)

Returns The node which this node is a child of.

Returns:



62
63
64
# File 'lib/graphql/internal_representation/node.rb', line 62

def parent
  @parent
end

#return_typeGraphQL::BaseType (readonly)

Returns:



56
57
58
# File 'lib/graphql/internal_representation/node.rb', line 56

def return_type
  @return_type
end

#spreadsArray<GraphQL::InternalRepresentation::Node> (readonly)

Note: by the time this gets out of the Rewrite phase, this will be empty – it’s emptied out when fragments are merged back in

Returns:



21
22
23
# File 'lib/graphql/internal_representation/node.rb', line 21

def spreads
  @spreads
end

Instance Method Details

#inspect(indent = 0) ⇒ Object



75
76
77
78
79
80
81
82
# File 'lib/graphql/internal_representation/node.rb', line 75

def inspect(indent = 0)
  own_indent = " " * indent
  self_inspect = "#{own_indent}<Node #{name} (#{definition_name}: {#{definitions.keys.join("|")}} -> #{return_type})>"
  if children.any?
    self_inspect << " {\n#{children.values.map { |n| n.inspect(indent + 2)}.join("\n")}\n#{own_indent}}"
  end
  self_inspect
end

#ownerGraphQL::InternalRepresentation::Node

Returns The root node which this node is a (perhaps-distant) child of, or ‘self` if this is a root node.

Returns:



65
66
67
68
69
70
71
72
73
# File 'lib/graphql/internal_representation/node.rb', line 65

def owner
  @owner ||= begin
    if parent.nil?
      self
    else
      parent.owner
    end
  end
end