Class: GraphQL::Language::Nodes::AbstractNode
- Inherits:
-
Object
- Object
- GraphQL::Language::Nodes::AbstractNode
- Defined in:
- lib/graphql/language/nodes.rb
Overview
AbstractNode is the base class for all nodes in a GraphQL AST.
It provides some APIs for working with ASTs:
-
‘children` returns all AST nodes attached to this one. Used for tree traversal.
-
‘scalars` returns all scalar (Ruby) values attached to this one. Used for comparing nodes.
-
‘to_query_string` turns an AST node into a GraphQL string
Direct Known Subclasses
Argument, Directive, Document, EnumTypeDefinition, Field, FieldDefinition, FragmentDefinition, FragmentSpread, InlineFragment, InputObject, InputObjectTypeDefinition, InputValueDefinition, InterfaceTypeDefinition, NameOnlyNode, ObjectTypeDefinition, OperationDefinition, SchemaDefinition, UnionTypeDefinition, VariableDefinition, WrapperType
Instance Attribute Summary collapse
-
#col ⇒ Object
Returns the value of attribute col.
-
#line ⇒ Object
Returns the value of attribute line.
Class Method Summary collapse
-
.child_attributes(*attr_names) ⇒ Object
define ‘attr_names` as places where child nodes may be attached to this node.
-
.inherited(subclass) ⇒ Object
A node subclass inherits ‘scalar_attributes` and `child_attributes` from its parent.
-
.scalar_attributes(*attr_names) ⇒ Object
define ‘attr_names` as places where scalars may be attached to this node.
Instance Method Summary collapse
-
#children ⇒ Array<GraphQL::Language::Nodes::AbstractNode>
All nodes in the tree below this one.
-
#eql?(other) ⇒ Boolean
Value equality.
-
#initialize(options = {}) ⇒ AbstractNode
constructor
Initialize a node by extracting its position, then calling the class’s ‘initialize_node` method.
-
#initialize_node(options = {}) ⇒ Object
This is called with node-specific options.
- #position ⇒ Object
-
#scalars ⇒ Array<Integer, Float, String, Boolean, Array>
Scalar values attached to this node.
- #to_query_string ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ AbstractNode
Initialize a node by extracting its position, then calling the class’s ‘initialize_node` method.
16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/graphql/language/nodes.rb', line 16 def initialize(={}) if .key?(:position_source) position_source = .delete(:position_source) @line, @col = position_source.line_and_column elsif .key?(:line) @line = .delete(:line) @col = .delete(:col) end initialize_node() end |
Instance Attribute Details
#col ⇒ Object
Returns the value of attribute col.
11 12 13 |
# File 'lib/graphql/language/nodes.rb', line 11 def col @col end |
#line ⇒ Object
Returns the value of attribute line.
11 12 13 |
# File 'lib/graphql/language/nodes.rb', line 11 def line @line end |
Class Method Details
.child_attributes(*attr_names) ⇒ Object
define ‘attr_names` as places where child nodes may be attached to this node
70 71 72 73 |
# File 'lib/graphql/language/nodes.rb', line 70 def child_attributes(*attr_names) @child_attributes ||= [] @child_attributes += attr_names end |
.inherited(subclass) ⇒ Object
A node subclass inherits ‘scalar_attributes` and `child_attributes` from its parent
58 59 60 61 |
# File 'lib/graphql/language/nodes.rb', line 58 def inherited(subclass) subclass.scalar_attributes(*@scalar_attributes) subclass.child_attributes(*@child_attributes) end |
.scalar_attributes(*attr_names) ⇒ Object
define ‘attr_names` as places where scalars may be attached to this node
64 65 66 67 |
# File 'lib/graphql/language/nodes.rb', line 64 def scalar_attributes(*attr_names) @scalar_attributes ||= [] @scalar_attributes += attr_names end |
Instance Method Details
#children ⇒ Array<GraphQL::Language::Nodes::AbstractNode>
Returns all nodes in the tree below this one.
43 44 45 46 47 |
# File 'lib/graphql/language/nodes.rb', line 43 def children self.class.child_attributes .map { |attr_name| public_send(attr_name) } .flatten end |
#eql?(other) ⇒ Boolean
Value equality
35 36 37 38 39 40 |
# File 'lib/graphql/language/nodes.rb', line 35 def eql?(other) return true if equal?(other) other.is_a?(self.class) && other.scalars.eql?(self.scalars) && other.children.eql?(self.children) end |
#initialize_node(options = {}) ⇒ Object
This is called with node-specific options
29 30 31 |
# File 'lib/graphql/language/nodes.rb', line 29 def initialize_node(={}) raise NotImplementedError end |
#position ⇒ Object
76 77 78 |
# File 'lib/graphql/language/nodes.rb', line 76 def position [line, col] end |
#scalars ⇒ Array<Integer, Float, String, Boolean, Array>
Returns Scalar values attached to this node.
50 51 52 53 |
# File 'lib/graphql/language/nodes.rb', line 50 def scalars self.class.scalar_attributes .map { |attr_name| public_send(attr_name) } end |
#to_query_string ⇒ Object
80 81 82 |
# File 'lib/graphql/language/nodes.rb', line 80 def to_query_string Generation.generate(self) end |