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, DirectiveDefinition, Document, EnumTypeDefinition, EnumValueDefinition, Field, FieldDefinition, FragmentDefinition, FragmentSpread, InlineFragment, InputObject, InputObjectTypeDefinition, InputValueDefinition, InterfaceTypeDefinition, NameOnlyNode, ObjectTypeDefinition, OperationDefinition, ScalarTypeDefinition, 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 |