module Stockboy # A hash for executing items in order with callbacks # class FilterChain < Hash # Initialize a new FilterChain with a hash of filters # # @param [Hash{Symbol=>Filter}] hash # def self.new(hash=nil) super().replace(hash || {}) end # Add filters to the front of the chain # # @param [Hash{Symbol=>Filter}] hash Filters to add # def prepend(hash) replace hash.merge(self) end # Call the reset callback on all filters that respond to it # # @return [Hash{Symbol=>Array}] Filter keys point to empty arrays # def reset each do |key, filter| filter.reset if filter.respond_to? :reset end keys_to_arrays end # @return [Hash{Symbol=>Array}] Filter keys point to empty arrays # def keys_to_arrays Hash[keys.map { |k| [k, []] }] end end end