Class: GraphQL::Language::StaticVisitor
  
  
  
  
  
    - Inherits:
- 
      Object
      
        
          - Object
- GraphQL::Language::StaticVisitor
 show all
    - Defined in:
- lib/graphql/language/static_visitor.rb
 
Overview
  
    Like GraphQL::Language::Visitor except it doesn’t support
making changes to the document – only visiting it as-is.
   
 
  
  
    
      Class Method Summary
      collapse
    
    
  
    
      Instance Method Summary
      collapse
    
    
  
  Constructor Details
  
    
  
  
    Returns a new instance of StaticVisitor.
   
 
  
  
    | 
7
8
9 | # File 'lib/graphql/language/static_visitor.rb', line 7
def initialize(document)
  @document = document
end | 
 
  
 
  
    Class Method Details
    
      
  
  
    .make_visit_methods(ast_node_class)  ⇒ Object 
  
  
  
  
    We don’t use alias here because it breaks super
   
 
  
  
    | 
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 | # File 'lib/graphql/language/static_visitor.rb', line 26
def self.make_visit_methods(ast_node_class)
  node_method = ast_node_class.visit_method
  children_of_type = ast_node_class.children_of_type
  child_visit_method = :"#{node_method}_children"
  class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
    # The default implementation for visiting an AST node.
    # It doesn't _do_ anything, but it continues to visiting the node's children.
    # To customize this hook, override one of its make_visit_methods (or the base method?)
    # in your subclasses.
    #
    # @param node [GraphQL::Language::Nodes::AbstractNode] the node being visited
    # @param parent [GraphQL::Language::Nodes::AbstractNode, nil] the previously-visited node, or `nil` if this is the root node.
    # @return [void]
    def #{node_method}(node, parent)
      #{
        if method_defined?(child_visit_method)
          "#{child_visit_method}(node)"
        elsif children_of_type
          children_of_type.map do |child_accessor, child_class|
            "node.#{child_accessor}.each do |child_node|
              #{child_class.visit_method}(child_node, node)
            end"
          end.join("\n")
        else
          ""
        end
      }
    end
  RUBY
end | 
 
    
   
  
    Instance Method Details
    
      
  
  
    #on_argument_children(new_node)  ⇒ Object 
  
  
  
  
    | 
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124 | # File 'lib/graphql/language/static_visitor.rb', line 109
def on_argument_children(new_node)
  new_node.children.each do |value_node|
    case value_node
    when Language::Nodes::VariableIdentifier
      on_variable_identifier(value_node, new_node)
    when Language::Nodes::InputObject
      on_input_object(value_node, new_node)
    when Language::Nodes::Enum
      on_enum(value_node, new_node)
    when Language::Nodes::NullValue
      on_null_value(value_node, new_node)
    else
      raise ArgumentError, "Invariant: unexpected argument value node #{value_node.class} (#{value_node.inspect})"
    end
  end
end | 
 
    
      
  
  
    #on_document_children(document_node)  ⇒ Object 
  
  
  
  
    | 
58
59
60
61
62
63 | # File 'lib/graphql/language/static_visitor.rb', line 58
def on_document_children(document_node)
  document_node.children.each do |child_node|
    visit_method = child_node.visit_method
    public_send(visit_method, child_node, document_node)
  end
end | 
 
    
      
  
  
    #on_field_children(new_node)  ⇒ Object 
  
  
  
  
    | 
65
66
67
68
69
70
71 | # File 'lib/graphql/language/static_visitor.rb', line 65
def on_field_children(new_node)
  new_node.arguments.each do |arg_node|     on_argument(arg_node, new_node)
  end
  visit_directives(new_node)
  visit_selections(new_node)
end | 
 
    
      
  
  
    #on_fragment_definition_children(new_node)  ⇒ Object 
  
  
    Also known as:
    on_inline_fragment_children
    
  
  
  
    | 
94
95
96
97 | # File 'lib/graphql/language/static_visitor.rb', line 94
def on_fragment_definition_children(new_node)
  visit_directives(new_node)
  visit_selections(new_node)
end | 
 
    
      
  
  
    #on_operation_definition_children(new_node)  ⇒ Object 
  
  
  
  
    | 
101
102
103
104
105
106
107 | # File 'lib/graphql/language/static_visitor.rb', line 101
def on_operation_definition_children(new_node)
  new_node.variables.each do |arg_node|
    on_variable_definition(arg_node, new_node)
  end
  visit_directives(new_node)
  visit_selections(new_node)
end | 
 
    
      
  
  
    #visit  ⇒ void 
  
  
  
  
    This method returns an undefined value.
Visit document and all children
   
 
  
  
    | 
13
14
15
16
17
18
19
20
21
22
23 | # File 'lib/graphql/language/static_visitor.rb', line 13
def visit
    visit_method = @document.visit_method
  result = public_send(visit_method, @document, nil)
  @result = if result.is_a?(Array)
    result.first
  else
        @document
  end
end | 
 
    
      
  
  
    #visit_directives(new_node)  ⇒ Object 
  
  
  
  
    | 
73
74
75
76
77 | # File 'lib/graphql/language/static_visitor.rb', line 73
def visit_directives(new_node)
  new_node.directives.each do |dir_node|
    on_directive(dir_node, new_node)
  end
end | 
 
    
      
  
  
    #visit_selections(new_node)  ⇒ Object 
  
  
  
  
    | 
79
80
81
82
83
84
85
86
87
88
89
90
91
92 | # File 'lib/graphql/language/static_visitor.rb', line 79
def visit_selections(new_node)
  new_node.selections.each do |selection|
    case selection
    when GraphQL::Language::Nodes::Field
      on_field(selection, new_node)
    when GraphQL::Language::Nodes::InlineFragment
      on_inline_fragment(selection, new_node)
    when GraphQL::Language::Nodes::FragmentSpread
      on_fragment_spread(selection, new_node)
    else
      raise ArgumentError, "Invariant: unexpected field selection #{selection.class} (#{selection.inspect})"
    end
  end
end |