module Brita
Here be dragons: there are two forms of metaprogramming in this file instance variables are being dynamically set based on the param name and we are class evaling `validates` to create dynamic validations based on the filters being validated.
Constants
- VERSION
Public Instance Methods
filter_errors()
click to toggle source
# File lib/brita.rb, line 32 def filter_errors filter_validator.errors.messages end
filter_params()
click to toggle source
# File lib/brita.rb, line 20 def filter_params params.fetch(:filters, {}) end
filters_valid?()
click to toggle source
# File lib/brita.rb, line 28 def filters_valid? filter_validator.valid? end
filtrate(collection)
click to toggle source
# File lib/brita.rb, line 16 def filtrate(collection) Filtrator.filter(collection, params, filters) end
sort_params()
click to toggle source
# File lib/brita.rb, line 24 def sort_params params.fetch(:sort, "").split(",") if filters.any? { |filter| filter.is_a?(Sort) } end
Private Instance Methods
filter_on(parameter, type:, internal_name: parameter, default: nil, validate: nil, scope_params: [])
click to toggle source
# File lib/brita.rb, line 56 def filter_on(parameter, type:, internal_name: parameter, default: nil, validate: nil, scope_params: []) filters << Filter.new(parameter, type, internal_name, default, validate, scope_params) end
filter_validator()
click to toggle source
# File lib/brita.rb, line 38 def filter_validator @_filter_validator ||= FilterValidator.build( filters: filters, sort_fields: self.class.sort_fields, filter_params: filter_params, sort_params: sort_params, ) end
filters()
click to toggle source
# File lib/brita.rb, line 47 def filters self.class.filters end
reset_filters()
click to toggle source
TODO: this is only used in tests, can I kill it?
# File lib/brita.rb, line 65 def reset_filters @_filters = [] end
sort_fields()
click to toggle source
# File lib/brita.rb, line 69 def sort_fields @_sort_fields ||= [] end
sort_on(parameter, type:, internal_name: parameter, scope_params: [])
click to toggle source
# File lib/brita.rb, line 73 def sort_on(parameter, type:, internal_name: parameter, scope_params: []) filters << Sort.new(parameter, type, internal_name, scope_params) sort_fields << parameter.to_s sort_fields << "-#{parameter}" end
sorts_exist?()
click to toggle source
# File lib/brita.rb, line 51 def sorts_exist? filters.any? { |filter| filter.is_a?(Sort) } end