Class: GraphQL::Visitor

Inherits:
Object
  • Object
show all
Defined in:
lib/graph_ql/parser/visitor.rb

Overview

Depth-first traversal through the tree, calling hooks at each stop.

@example: Create a visitor, add hooks, then search a document total_field_count = 0 visitor = GraphQL::Visitor.new visitor << -> (node) { total_field_count += 1 } visitor.leave << -> (node) { p total_field_count } visitor.visit(document)

=> 6

Defined Under Namespace

Classes: NodeVisitor

Constant Summary collapse

SKIP =
:_skip

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize ⇒ Visitor

Returns a new instance of Visitor.



15
16
17
18
19
# File 'lib/graph_ql/parser/visitor.rb', line 15

def initialize
  @visitors = {}
  @enter = []
  @leave = []
end

Instance Attribute Details

#enter ⇒ Object (readonly)

Returns the value of attribute enter.



14
15
16
# File 'lib/graph_ql/parser/visitor.rb', line 14

def enter
  @enter
end

#leave ⇒ Object (readonly)

Returns the value of attribute leave.



14
15
16
# File 'lib/graph_ql/parser/visitor.rb', line 14

def leave
  @leave
end

Instance Method Details

#[](node_class) ⇒ Object



21
22
23
# File 'lib/graph_ql/parser/visitor.rb', line 21

def [](node_class)
  @visitors[node_class] ||= NodeVisitor.new
end

#visit(root, parent = nil) ⇒ Object

Apply built-up vistors to document



26
27
28
29
30
# File 'lib/graph_ql/parser/visitor.rb', line 26

def visit(root, parent=nil)
  begin_visit(root, parent) &&
    root.children.reduce(true) { |memo, child| memo && visit(child, root) }
  end_visit(root, parent)
end