Sha256: b40318fcc6a6d2f038dc8210e654dd1ebc958caef80bd81a8e0cb1c31e6a96c2
Contents?: true
Size: 811 Bytes
Versions: 1
Compression:
Stored size: 811 Bytes
Contents
require_relative 'refinements' require_relative 'parser' module Rack module Reducer # call `reduce` on a params hash, filtering data via lambdas with # matching keyword arguments class Reduction using Refinements # define Proc#required_argument_names, #satisfies?, etc DEFAULTS = { dataset: [], filters: [], params: nil }.freeze def initialize(options) @props = DEFAULTS.merge(options) @params = Parser.call(@props[:params]) end def reduce @props[:filters].reduce(@props[:dataset]) do |data, filter| next data unless filter.satisfies?(@params) data.instance_exec(@params.slice(*filter.all_argument_names), &filter) end end end private_constant :Reduction end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rack-reducer-1.0.1 | lib/rack/reducer/reduction.rb |