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

Returns a new instance of FilterParametersExtractor.

Parameters:



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>, []}]

Returns <=> <Might::FilterParameter>, []].

Parameters:

  • env (<{:filter => Hash}, []>)
    • first element is a scope to be filtered

    • second is a hash with user provided filters

Returns:



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