Class: Rack::Reducer::Reduction

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/reducer/reduction.rb

Overview

call ‘reduce` on a params hash, filtering data via lambdas with matching keyword arguments

Constant Summary collapse

DEFAULTS =
{
  dataset: [],
  filters: [],
  key: 'rack.reduction',
  params: nil
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(app, props) ⇒ Reduction

Returns a new instance of Reduction.



20
21
22
23
# File 'lib/rack/reducer/reduction.rb', line 20

def initialize(app, props)
  @app = app
  @props = DEFAULTS.merge(props)
end

Instance Method Details

#call(env) ⇒ Object

when mounted as middleware, set env[@props] to the output of self.reduce, then call the next app in the middleware stack



27
28
29
30
# File 'lib/rack/reducer/reduction.rb', line 27

def call(env)
  @params = Rack::Request.new(env).params.symbolize_keys
  @app.call env.merge(@props[:key] => reduce)
end

#reduceObject



32
33
34
# File 'lib/rack/reducer/reduction.rb', line 32

def reduce
  @props[:filters].reduce(@props[:dataset], &method(:apply_filter))
end