Class: GraphQL::Language::Nodes::AbstractNode

Inherits:
Object
  • Object
show all
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

Defined Under Namespace

Modules: Scalars

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ AbstractNode

Initialize a node by extracting its position, then calling the class's initialize_node method.

Parameters:

  • options (Hash) (defaults to: {})

    Initial attributes for this node



26
27
28
29
30
31
32
33
34
35
# File 'lib/graphql/language/nodes.rb', line 26

def initialize(options={})
  if options.key?(:position_source)
    position_source = options.delete(:position_source)
    @line, @col = position_source.line_and_column
  end

  @filename = options.delete(:filename)

  initialize_node(options)
end

Instance Attribute Details

#colObject

Returns the value of attribute col



21
22
23
# File 'lib/graphql/language/nodes.rb', line 21

def col
  @col
end

#filenameObject

Returns the value of attribute filename



21
22
23
# File 'lib/graphql/language/nodes.rb', line 21

def filename
  @filename
end

#lineObject

Returns the value of attribute line



21
22
23
# File 'lib/graphql/language/nodes.rb', line 21

def line
  @line
end

Instance Method Details

#childrenArray<GraphQL::Language::Nodes::AbstractNode>

Returns all nodes in the tree below this one

Returns:



52
53
54
# File 'lib/graphql/language/nodes.rb', line 52

def children
  []
end

#eql?(other) ⇒ Boolean

Value equality

Returns:

  • (Boolean)

    True if self is equivalent to other



44
45
46
47
48
49
# File 'lib/graphql/language/nodes.rb', line 44

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

Raises:

  • (NotImplementedError)


38
39
40
# File 'lib/graphql/language/nodes.rb', line 38

def initialize_node(options={})
  raise NotImplementedError
end

#positionObject



61
62
63
# File 'lib/graphql/language/nodes.rb', line 61

def position
  [line, col]
end

#scalarsArray<Integer, Float, String, Boolean, Array>

Returns Scalar values attached to this node

Returns:

  • (Array<Integer, Float, String, Boolean, Array>)

    Scalar values attached to this node



57
58
59
# File 'lib/graphql/language/nodes.rb', line 57

def scalars
  []
end

#to_query_string(printer: GraphQL::Language::Printer.new) ⇒ Object



65
66
67
# File 'lib/graphql/language/nodes.rb', line 65

def to_query_string(printer: GraphQL::Language::Printer.new)
  printer.print(self)
end