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