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