Module: GraphQL::InternalRepresentation::Visit

Defined in:
lib/graphql/internal_representation/visit.rb

Overview

Traverse a re-written query tree, calling handlers for each node

Class Method Summary collapse

Class Method Details

.each_node(node) {|node| ... } ⇒ Object

Traverse a node in a rewritten query tree, visiting the node itself and each of its typed children.

Yields:

  • (node)

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

def each_node(node)
  yield(node)
  if node.typed_children.any?
    visit_block = Proc.new
    node.typed_children.each do |obj_type, children|
      children.each do |name, node|
        each_node(node, &visit_block)
      end
    end
  end
end

.visit_each_node(operations, handlers) ⇒ Object


7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/graphql/internal_representation/visit.rb', line 7

def visit_each_node(operations, handlers)
  # Post-validation: make some assertions about the rewritten query tree
  operations.each do |op_name, op_node|
    # Yield each node to listeners which were attached by validators
    op_node.typed_children.each do |obj_type, children|
      children.each do |name, op_child_node|
        each_node(op_child_node) do |node|
          for h in handlers
            h.call(node)
          end
        end
      end
    end
  end
end