Module: Rack::Reducer

Defined in:
lib/rack/reducer.rb,
lib/rack/reducer/parser.rb,
lib/rack/reducer/reduction.rb,
lib/rack/reducer/refinements.rb

Overview

use request params to apply filters to a dataset

Defined Under Namespace

Modules: Parser, Refinements Classes: Reduction

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.call(params, dataset:, filters:) ⇒ Object

call Rack::Reducer as a function, instead of mounting it as middleware



10
11
12
13
14
15
16
17
# File 'lib/rack/reducer.rb', line 10

def self.call(params, dataset:, filters:)
  Reduction.new(
    nil, # first arg to Reduction is `app`, which is for middleware only
    params: params,
    filters: filters,
    dataset: dataset,
  ).reduce
end

.new(app, options = {}) ⇒ Object



19
20
21
# File 'lib/rack/reducer.rb', line 19

def self.new(app, options = {})
  Reduction.new(app, options)
end

Instance Method Details

#reduce(params) ⇒ Object

extend Rack::Reducer to get ‘reduce` and `reduces` as class-methods

class Artist < SomeORM::Model

extend Rack::Reducer
reduces self.all, filters: [
  lambda { |name:| where(name: name) },
  lambda { |genre:| where(genre: genre) },
]

end



32
33
34
35
36
37
38
39
# File 'lib/rack/reducer.rb', line 32

def reduce(params)
  Reduction.new(
    nil,
    params: params,
    filters: @rack_reducer_filters,
    dataset: @rack_reducer_dataset
  ).reduce
end

#reduces(dataset, filters:) ⇒ Object



41
42
43
44
# File 'lib/rack/reducer.rb', line 41

def reduces(dataset, filters:)
  @rack_reducer_dataset = dataset
  @rack_reducer_filters = filters
end