Sha256: c999e0d745cdc17e621a17b0d5ee82cc3ad715c760d49eeb19543896d957770b

Contents?: true

Size: 1.22 KB

Versions: 16

Compression:

Stored size: 1.22 KB

Contents

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

16 entries across 16 versions & 1 rubygems

Version Path
graphql-1.2.6 lib/graphql/analysis/reducer_state.rb
graphql-1.2.5 lib/graphql/analysis/reducer_state.rb
graphql-1.2.4 lib/graphql/analysis/reducer_state.rb
graphql-1.2.3 lib/graphql/analysis/reducer_state.rb
graphql-1.2.2 lib/graphql/analysis/reducer_state.rb
graphql-1.2.1 lib/graphql/analysis/reducer_state.rb
graphql-1.2.0 lib/graphql/analysis/reducer_state.rb
graphql-1.1.0 lib/graphql/analysis/reducer_state.rb
graphql-1.0.0 lib/graphql/analysis/reducer_state.rb
graphql-0.19.4 lib/graphql/analysis/reducer_state.rb
graphql-0.19.3 lib/graphql/analysis/reducer_state.rb
graphql-0.19.2 lib/graphql/analysis/reducer_state.rb
graphql-0.19.1 lib/graphql/analysis/reducer_state.rb
graphql-0.19.0 lib/graphql/analysis/reducer_state.rb
graphql-0.18.15 lib/graphql/analysis/reducer_state.rb
graphql-0.18.14 lib/graphql/analysis/reducer_state.rb