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[GraphQL::Nodes::Field] << -> (node) { total_field_count += 1 }
visitor[GraphQL::Nodes::Document].leave << -> (node) { p total_field_count }
visitor.visit(document)
# => 6

Defined Under Namespace

Classes: NodeVisitor

Instance Method Summary collapse

Constructor Details

#initializeVisitor

Returns a new instance of Visitor.



12
13
14
# File 'lib/graph_ql/parser/visitor.rb', line 12

def initialize
  @visitors = {}
end

Instance Method Details

#[](node_class) ⇒ Object



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

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

#visit(root) ⇒ Object

Apply built-up vistors to ‘document`



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

def visit(root)
  node_visitor = self[root.class]
  node_visitor.begin_visit(root)
  root.children.map { |child| visit(child) }
  node_visitor.end_visit(root)
end