Class: Might::FilterParametersExtractor

Inherits:
Object
  • Object
show all
Defined in:
lib/might/filter_parameters_extractor.rb

Overview

User provided filters syntax:

* `{ 'name_eq' => 'Martin' }` - name is equal to Martin
* `{ 'name_in' => 'Martin,Bob' }` - name is either Martin or Bob

This middleware parses filters hash and builds Parameter array If user passes not defined filter, it yields to UndefinedParameter, so you may validate it.

See Also:

Instance Method Summary collapse

Constructor Details

#initialize(app, parameters_definition) ⇒ FilterParametersExtractor



16
17
18
19
# File 'lib/might/filter_parameters_extractor.rb', line 16

def initialize(app, parameters_definition)
  @app = app
  @parameters_definition = parameters_definition
end

Instance Method Details

#call(env) ⇒ <{:filter => <Might::FilterParameter>, []}]



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/might/filter_parameters_extractor.rb', line 26

def call(env)
  params, errors = env

  provided_parameters = Hash(params[:filter]).each_with_object(FilterParameters.new) do |(name, value), parameters|
    type_casted_value = type_cast_value(name, value)
    parameters << extract_parameter(name, type_casted_value)
  end

  not_provided_parameters = parameters_definition - provided_parameters.map(&:definition)

  undefined_parameters = not_provided_parameters.map do |definition|
    FilterParameter.new(nil, nil, definition)
  end

  # Keep even undefined parameters to validate required ones
  filters = provided_parameters + undefined_parameters

  app.call([params.merge(filter: filters), errors])
end