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

Version Path
graphql-1.11.12 lib/graphql/analysis/reducer_state.rb
graphql-1.11.11 lib/graphql/analysis/reducer_state.rb
graphql-1.12.25 lib/graphql/analysis/reducer_state.rb
graphql-1.13.24 lib/graphql/analysis/reducer_state.rb
graphql-1.13.23 lib/graphql/analysis/reducer_state.rb
graphql-1.13.22 lib/graphql/analysis/reducer_state.rb
graphql-1.13.21 lib/graphql/analysis/reducer_state.rb
graphql-1.13.20 lib/graphql/analysis/reducer_state.rb
graphql-1.13.19 lib/graphql/analysis/reducer_state.rb
graphql-1.13.18 lib/graphql/analysis/reducer_state.rb
graphql-1.13.17 lib/graphql/analysis/reducer_state.rb
graphql-1.13.16 lib/graphql/analysis/reducer_state.rb
graphql-1.13.15 lib/graphql/analysis/reducer_state.rb
graphql-1.13.14 lib/graphql/analysis/reducer_state.rb
graphql-1.13.13 lib/graphql/analysis/reducer_state.rb
graphql_cody-1.13.0 lib/graphql/analysis/reducer_state.rb
graphql-1.13.12 lib/graphql/analysis/reducer_state.rb
graphql-1.13.11 lib/graphql/analysis/reducer_state.rb
graphql-1.13.10 lib/graphql/analysis/reducer_state.rb
graphql-1.13.9 lib/graphql/analysis/reducer_state.rb