Files

QuestSearch::QuestSearchOn::ClassMethods

Public Instance Methods

quest_search_for(query, page_no = 1, page_size = 2**32, sort = nil) click to toggle source
# File lib/quest_search/quest_search_on.rb, line 23
def quest_search_for(query, page_no = 1, page_size = 2**32, sort = nil)
  words = ::UnicodeUtils.downcase(query.to_s).split " "
  conditions = words.map do |w|
    replace_bind_variables("#{self.quest_search_index_field} like ?", ["%#{w}%"])
  end.join " OR "

  offset = (page_no * page_size) - page_size
  offset_ends = offset + page_size

  @order = sort || @order

  results = self.where(conditions).order(@order)

  if !sort
    results = results.sort do |a, b|
      b.points_for(query) <=> a.points_for(query)
    end
  else
    results = results.each do |r|
      r.points_for(query)
    end
  end

  paginated_results = []

  results.each_with_index do |r, index|
    if index >= offset && index < offset_ends
      paginated_results.push r
    end
  end

  paginated_results
end
quest_search_on(*fields) click to toggle source
# File lib/quest_search/quest_search_on.rb, line 8
def quest_search_on(*fields)
  if fields.size.zero?
    raise "No arguments given, please specify which fields should be indexed and searched."
  end

  options = fields.extract_options!
  @order = options[:order] || "id desc"

  cattr_accessor :quest_search_fields, :quest_search_index_field

  self.quest_search_fields = fields
  self.quest_search_index_field = options[:quest_search_index_field] || :quest_search_index
  self.before_save :update_quest_search_index
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.