module Lipstick::Filterable::ClassMethods
Attributes
filterable_fields[R]
Public Instance Methods
filterable_by(*fields)
click to toggle source
# File lib/lipstick/filterable.rb, line 33 def filterable_by(*fields) @filterable_fields = fields end
filterable_filter(query, collation = 'utf8_unicode_ci')
click to toggle source
# File lib/lipstick/filterable.rb, line 37 def filterable_filter(query, collation = 'utf8_unicode_ci') filter_terms(query).reduce(all) do |scope, term| conds = filterable_fields.map do |f| CollatedArelAttribute.new(arel_table[f], collation) .matches(term) end scope.where(conds.reduce { |acc, elem| acc.or(elem) }) end end
Private Instance Methods
filter_terms(query)
click to toggle source
# File lib/lipstick/filterable.rb, line 49 def filter_terms(query) query.to_s.downcase.split(/\s+/).map { |s| "*#{s}*".gsub(/[%*]+/, '%') } end