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 |