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
Returns a new instance of 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>, []}]
Returns <=> <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 |