Sha256: 309aea22d82d53e54387d043160659adc7f11330c57a63356e73b4eb54226cda

Contents?: true

Size: 928 Bytes

Versions: 2

Compression:

Stored size: 928 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 call(_original_input, _results_array)
          raise NotImplementedError
        end

        private

        def wrap_result(result)
          Concurrent::Promise.fulfill(result)
        end

        def unwrap_result(res)
          unvalidated = res.result.value!

          return unvalidated if filter.nil?

          filter.call(unvalidated).value
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
attr-gather-1.1.3 lib/attr/gather/aggregators/base.rb
attr-gather-1.1.2 lib/attr/gather/aggregators/base.rb