Class: GraphQL::Analysis::QueryComplexity
- Inherits:
 - 
      Object
      
        
- Object
 - GraphQL::Analysis::QueryComplexity
 
 
- Defined in:
 - lib/graphql/analysis/query_complexity.rb
 
Overview
Calculate the complexity of a query, using Field#complexity values.
Direct Known Subclasses
Defined Under Namespace
Classes: TypeComplexity
Instance Method Summary collapse
- 
  
    
      #call(memo, visit_type, irep_node)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Implement the query analyzer API.
 - 
  
    
      #final_value(reduced_value)  ⇒ Object, GraphQL::AnalysisError 
    
    
  
  
  
  
  
  
  
  
  
    
Send the query and complexity to the block.
 - 
  
    
      #initial_value(target)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
State for the query complexity calcuation: -
targetis passed to handler -complexities_on_typeholds complexity scores for each type in an IRep node. - 
  
    
      #initialize {|query, complexity| ... } ⇒ QueryComplexity 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
A new instance of QueryComplexity.
 
Constructor Details
#initialize {|query, complexity| ... } ⇒ QueryComplexity
Returns a new instance of QueryComplexity
      15 16 17  | 
    
      # File 'lib/graphql/analysis/query_complexity.rb', line 15 def initialize(&block) @complexity_handler = block end  | 
  
Instance Method Details
#call(memo, visit_type, irep_node) ⇒ Object
Implement the query analyzer API
      30 31 32 33 34 35 36 37 38 39 40 41 42  | 
    
      # File 'lib/graphql/analysis/query_complexity.rb', line 30 def call(memo, visit_type, irep_node) if irep_node.ast_node.is_a?(GraphQL::Language::Nodes::Field) if visit_type == :enter memo[:complexities_on_type].push(TypeComplexity.new) else type_complexities = memo[:complexities_on_type].pop child_complexity = type_complexities.max_possible_complexity own_complexity = get_complexity(irep_node, child_complexity) memo[:complexities_on_type].last.merge(irep_node.owner_type, own_complexity) end end memo end  | 
  
#final_value(reduced_value) ⇒ Object, GraphQL::AnalysisError
Send the query and complexity to the block
      46 47 48 49  | 
    
      # File 'lib/graphql/analysis/query_complexity.rb', line 46 def final_value(reduced_value) total_complexity = reduced_value[:complexities_on_type].last.max_possible_complexity @complexity_handler.call(reduced_value[:target], total_complexity) end  | 
  
#initial_value(target) ⇒ Object
State for the query complexity calcuation:
- target is passed to handler
- complexities_on_type holds complexity scores for each type in an IRep node
      22 23 24 25 26 27  | 
    
      # File 'lib/graphql/analysis/query_complexity.rb', line 22 def initial_value(target) { target: target, complexities_on_type: [TypeComplexity.new], } end  |