Class: GraphQL::Analysis::AST::QueryDepth
  
  
  
  
  
    - Inherits:
- 
      Analyzer
      
        
          - Object
- Analyzer
- GraphQL::Analysis::AST::QueryDepth
 show all
    - Defined in:
- lib/graphql/analysis/ast/query_depth.rb
 
  
    
      Instance Method Summary
      collapse
    
    
  
  
  
  
  
  
  
  
  
  Methods inherited from Analyzer
  #analyze?, build_visitor_hooks
  Constructor Details
  
    
  
  
    #initialize(query)  ⇒ QueryDepth 
  
  
  
  
    Returns a new instance of QueryDepth
   
 
  
  
    | 
18
19
20
21
22
23 | # File 'lib/graphql/analysis/ast/query_depth.rb', line 18
def initialize(query)
  @max_depth = 0
  @current_depth = 0
  @skip_depth = 0
  super
end | 
 
  
 
  
    Instance Method Details
    
      
  
  
    #on_enter_field(node, parent, visitor)  ⇒ Object 
  
  
  
  
    | 
25
26
27
28
29
30
31
32
33
34
35
36 | # File 'lib/graphql/analysis/ast/query_depth.rb', line 25
def on_enter_field(node, parent, visitor)
  return if visitor.skipping? || visitor.visiting_fragment_definition?
    if GraphQL::Schema::DYNAMIC_FIELDS.include?(visitor.field_definition.name)
    @skip_depth += 1
  elsif @skip_depth > 0
      else
    @current_depth += 1
  end
end | 
 
    
      
  
  
    #on_enter_fragment_spread(node, _, visitor)  ⇒ Object 
  
  
  
  
    | 
52
53
54 | # File 'lib/graphql/analysis/ast/query_depth.rb', line 52
def on_enter_fragment_spread(node, _, visitor)
  visitor.enter_fragment_spread_inline(node)
end | 
 
    
      
  
  
    #on_leave_field(node, parent, visitor)  ⇒ Object 
  
  
  
  
    | 
38
39
40
41
42
43
44
45
46
47
48
49
50 | # File 'lib/graphql/analysis/ast/query_depth.rb', line 38
def on_leave_field(node, parent, visitor)
  return if visitor.skipping? || visitor.visiting_fragment_definition?
    if GraphQL::Schema::DYNAMIC_FIELDS.include?(visitor.field_definition.name)
    @skip_depth -= 1
  else
    if @max_depth < @current_depth
      @max_depth = @current_depth
    end
    @current_depth -= 1
  end
end | 
 
    
      
  
  
    #on_leave_fragment_spread(node, _, visitor)  ⇒ Object 
  
  
  
  
    | 
56
57
58 | # File 'lib/graphql/analysis/ast/query_depth.rb', line 56
def on_leave_fragment_spread(node, _, visitor)
  visitor.leave_fragment_spread_inline(node)
end | 
 
    
      
  
  
    #result  ⇒ Object 
  
  
  
  
    | 
60
61
62 | # File 'lib/graphql/analysis/ast/query_depth.rb', line 60
def result
  @max_depth
end |