Class: Brita::FilterValidator

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Validations
Defined in:
lib/brita/filter_validator.rb

Class Method Summary collapse

Instance Method Summary collapse

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

Returns:

  • (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

Returns:

  • (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