Class: Might::FilterParametersExtractor
- Inherits:
-
Object
- Object
- Might::FilterParametersExtractor
- 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.
Instance Method Summary collapse
-
#call(env) ⇒ <{:filter => <Might::FilterParameter>, []}]
<=> <Might::FilterParameter>, []].
-
#initialize(app, parameters_definition) ⇒ FilterParametersExtractor
constructor
A new instance of FilterParametersExtractor.
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 |