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: -
target
is passed to handler -complexities_on_type
holds 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 |