Module: Rack::Reducer

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

Overview

Use request params to apply filters to a dataset

Defined Under Namespace

Modules: Parser, Refinements Classes: Middleware, Reduction

Constant Summary collapse

VERSION =
'1.0.0'.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

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

Call Rack::Reducer as a function



8
9
10
11
12
13
14
# File 'lib/rack/reducer.rb', line 8

def self.call(params, dataset:, filters:)
  Reduction.new(
    params: params,
    filters: filters,
    dataset: dataset
  ).reduce
end

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

Mount Rack::Reducer as middleware



17
18
19
# File 'lib/rack/reducer.rb', line 17

def self.new(app, options = {})
  Middleware.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



30
31
32
33
34
35
36
# File 'lib/rack/reducer.rb', line 30

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

#reduces(dataset, filters:) ⇒ Object



38
39
40
41
# File 'lib/rack/reducer.rb', line 38

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