Class: Brita::FilterValidator
- Inherits:
-
Object
- Object
- Brita::FilterValidator
- Includes:
- ActiveModel::Validations
- Defined in:
- lib/brita/filter_validator.rb
Class Method Summary collapse
- .build(filters:, sort_fields:, filter_params:, sort_params:) ⇒ Object
- .has_custom_validation?(filter, filter_params) ⇒ Boolean
- .has_validation?(filter, filter_params, sort_fields) ⇒ Boolean
Instance Method Summary collapse
-
#initialize(filters, filter_params:, sort_params:) ⇒ FilterValidator
constructor
A new instance of FilterValidator.
Constructor Details
#initialize(filters, filter_params:, sort_params:) ⇒ FilterValidator
Returns a new instance of FilterValidator.
40 41 42 43 44 45 46 47 |
# File 'lib/brita/filter_validator.rb', line 40 def initialize(filters, filter_params:, sort_params:) @filter_params = filter_params @sort_params = sort_params filters.each do |filter| instance_variable_set("@#{filter.validation_field}", to_type(filter)) end end |
Class Method Details
.build(filters:, sort_fields:, filter_params:, sort_params:) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/brita/filter_validator.rb', line 10 def self.build(filters:, sort_fields:, filter_params:, sort_params:) unique_validations_filters = filters.uniq(&:validation_field) klass = Class.new(self) do def self.model_name ActiveModel::Name.new(self, nil, "temp") end attr_accessor(*unique_validations_filters.map(&:validation_field)) unique_validations_filters.each do |filter| if has_custom_validation?(filter, filter_params) validate filter.custom_validate elsif has_validation?(filter, filter_params, sort_fields) validates filter.validation_field.to_sym, filter.validation(sort_fields) end end end klass.new(filters, filter_params: filter_params, sort_params: sort_params) end |
.has_custom_validation?(filter, filter_params) ⇒ Boolean
32 33 34 |
# File 'lib/brita/filter_validator.rb', line 32 def self.has_custom_validation?(filter, filter_params) filter_params[filter.validation_field] && filter.custom_validate end |
.has_validation?(filter, filter_params, sort_fields) ⇒ Boolean
36 37 38 |
# File 'lib/brita/filter_validator.rb', line 36 def self.has_validation?(filter, filter_params, sort_fields) (filter_params[filter.validation_field] && filter.validation(sort_fields)) || filter.validation_field == :sort end |