class Sift::FilterValidator
Attributes
filter_params[R]
sort_params[R]
Public Class Methods
build(filters:, sort_fields:, filter_params:, sort_params:)
click to toggle source
# File lib/sift/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)
click to toggle source
# File lib/sift/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)
click to toggle source
# File lib/sift/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
model_name()
click to toggle source
# File lib/sift/filter_validator.rb, line 14 def self.model_name ActiveModel::Name.new(self, nil, "temp") end
new(filters, filter_params:, sort_params:)
click to toggle source
# File lib/sift/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
Private Instance Methods
to_type(filter)
click to toggle source
# File lib/sift/filter_validator.rb, line 53 def to_type(filter) if filter.type == :boolean if Rails.version.starts_with?('5') || Rails.version.starts_with?('6') ActiveRecord::Type::Boolean.new.cast(filter_params[filter.param]) else ActiveRecord::Type::Boolean.new.type_cast_from_user(filter_params[filter.param]) end elsif filter.validation_field == :sort sort_params else filter_params[filter.param] end end