Sha256: 4991cfcf268c08cfbb8885971a3b4d8ea6ca74ae097124b8bc898012084ec8ae
Contents?: true
Size: 1.25 KB
Versions: 185
Compression:
Stored size: 1.25 KB
Contents
# frozen_string_literal: true module GraphQL module Analysis class ReducerState attr_reader :reducer attr_accessor :memo, :errors def initialize(reducer, query) @reducer = reducer @memo = initialize_reducer(reducer, query) @errors = [] end def call(visit_type, irep_node) @memo = @reducer.call(@memo, visit_type, irep_node) rescue AnalysisError => err @errors << err end # 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 def finalize_reducer if @errors.any? @errors elsif reducer.respond_to?(:final_value) reducer.final_value(@memo) else @memo end end private # 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 def initialize_reducer(reducer, query) if reducer.respond_to?(:initial_value) reducer.initial_value(query) else nil end end end end end
Version data entries
185 entries across 185 versions & 2 rubygems