class GraphQL::Analysis::ReducerState
Attributes
errors[RW]
memo[RW]
reducer[R]
Public Class Methods
new(reducer, query)
click to toggle source
# File lib/graphql/analysis/reducer_state.rb, line 7 def initialize(reducer, query) @reducer = reducer @memo = initialize_reducer(reducer, query) @errors = [] end
Public Instance Methods
call(visit_type, irep_node)
click to toggle source
# File lib/graphql/analysis/reducer_state.rb, line 13 def call(visit_type, irep_node) @memo = @reducer.call(@memo, visit_type, irep_node) rescue AnalysisError => err @errors << err end
finalize_reducer()
click to toggle source
Respond with any errors, if found. Otherwise, if the reducer accepts `final_value`, send it the last memo value. Otherwise, use the last value from the traversal. @return [Any] final memo value
# File lib/graphql/analysis/reducer_state.rb, line 23 def finalize_reducer if @errors.any? @errors elsif reducer.respond_to?(:final_value) reducer.final_value(@memo) else @memo end end
Private Instance Methods
initialize_reducer(reducer, query)
click to toggle source
If the reducer has an `initial_value` method, call it and store the result as `memo`. Otherwise, use `nil` as memo. @return [Any] initial memo value
# File lib/graphql/analysis/reducer_state.rb, line 38 def initialize_reducer(reducer, query) if reducer.respond_to?(:initial_value) reducer.initial_value(query) else nil end end