Module: GraphQL::Analysis
- Defined in:
- lib/graphql/analysis/field_usage.rb,
lib/graphql/analysis/query_depth.rb,
lib/graphql/analysis/analyze_query.rb,
lib/graphql/analysis/reducer_state.rb,
lib/graphql/analysis/max_query_depth.rb,
lib/graphql/analysis/query_complexity.rb,
lib/graphql/analysis/max_query_complexity.rb
Defined Under Namespace
Classes: FieldUsage, MaxQueryComplexity, MaxQueryDepth, QueryComplexity, QueryDepth, ReducerState
Class Method Summary collapse
-
.analyze_multiplex(multiplex, analyzers) ⇒ void
-
.analyze_query(query, analyzers, multiplex_states: []) ⇒ Array<Any>
Visit
query’s internal representation, callinganalyzersalong the way.
Class Method Details
.analyze_multiplex(multiplex, analyzers) ⇒ void
This method returns an undefined value.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/graphql/analysis/analyze_query.rb', line 7 def analyze_multiplex(multiplex, analyzers) multiplex.trace("analyze_multiplex", { multiplex: multiplex }) do reducer_states = analyzers.map { |r| ReducerState.new(r, multiplex) } query_results = multiplex.queries.map do |query| if query.valid? analyze_query(query, query.analyzers, multiplex_states: reducer_states) else [] end end multiplex_results = reducer_states.map(&:finalize_reducer) multiplex_errors = analysis_errors(multiplex_results) multiplex.queries.each_with_index do |query, idx| query.analysis_errors = multiplex_errors + analysis_errors(query_results[idx]) end end nil end |
.analyze_query(query, analyzers, multiplex_states: []) ⇒ Array<Any>
Visit query’s internal representation, calling analyzers along the way.
- First, query analyzers are initialized by calling
.initial_value(query), if they respond to that method. - Then, they receive
.call(memo, visit_type, irep_node), where visit type is:enteror:leave. - Last, they receive
.final_value(memo), if they respond to that method.
It returns an array of final memo values in the order that analyzers were passed in.
39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/graphql/analysis/analyze_query.rb', line 39 def analyze_query(query, analyzers, multiplex_states: []) query.trace("analyze_query", { query: query }) do reducer_states = analyzers.map { |r| ReducerState.new(r, query) } + multiplex_states irep = query.internal_representation irep.operation_definitions.each do |name, op_node| reduce_node(op_node, reducer_states) end reducer_states.map(&:finalize_reducer) end end |