Class: Rack::Reducer::Reduction
- Inherits:
-
Object
- Object
- Rack::Reducer::Reduction
- Defined in:
- lib/rack/reducer/reduction.rb
Overview
call ‘reduce` on a params hash, filtering data via lambdas with matching keyword arguments
Instance Method Summary collapse
-
#apply(params) ⇒ Object
Run @filters against the params argument.
-
#initialize(dataset, *filters) ⇒ Reduction
constructor
A new instance of Reduction.
Constructor Details
#initialize(dataset, *filters) ⇒ Reduction
Returns a new instance of Reduction.
12 13 14 15 16 17 18 |
# File 'lib/rack/reducer/reduction.rb', line 12 def initialize(dataset, *filters) @dataset = dataset @filters = filters @default_filters = filters.select do |filter| filter.required_argument_names.empty? end end |
Instance Method Details
#apply(params) ⇒ Object
Run @filters against the params argument
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/rack/reducer/reduction.rb', line 24 def apply(params) if !params || params.empty? return @dataset if @default_filters.empty? filters = @default_filters symbolized_params = {} else filters = @filters symbolized_params = params.to_unsafe_h.symbolize_keys end filters.reduce(@dataset) do |data, filter| next data unless filter.satisfies?(symbolized_params) data.instance_exec( **symbolized_params.slice(*filter.all_argument_names), &filter ) end end |