Sha256: 3fbe22c8dbe80e0dcff57bbe6f9c7e0887289b1b82894e3cf57cb6d1a308115d

Contents?: true

Size: 866 Bytes

Versions: 4

Compression:

Stored size: 866 Bytes

Contents

# frozen_string_literal: true

require 'attr/gather/filters/noop'

module Attr
  module Gather
    module Aggregators
      # @abstract Subclass and override {#call} to implement
      #   a custom Aggregator class.
      #
      # @!attribute [r] filter
      #   @return [Attr::Gather::Filters::Base] filter for the output data
      class Base
        attr_accessor :filter

        NOOP_FILTER ||= Filters::Noop.new

        def initialize(**opts)
          @filter = opts.delete(:filter) || NOOP_FILTER
        end

        def with(**opts)
          self.class.new(filter: @filter, **opts)
        end

        def call(_original_input, _results_array)
          raise NotImplementedError
        end

        private

        def unwrap_result(res)
          return res if filter.nil?

          filter.call(res).value
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
attr-gather-1.4.0 lib/attr/gather/aggregators/base.rb
attr-gather-1.2.1 lib/attr/gather/aggregators/base.rb
attr-gather-1.3.0 lib/attr/gather/aggregators/base.rb
attr-gather-1.2.0 lib/attr/gather/aggregators/base.rb