class Feedcellar::GroongaSearcher
Public Class Methods
latest(database)
click to toggle source
# File lib/feedcellar/groonga_searcher.rb, line 35 def latest(database) latest_feeds = [] feeds = database.feeds feeds.group("resource.xmlUrl", :max_n_sub_records => 1).each do |group| latest_feed = group.sub_records[0] next unless latest_feed next unless latest_feed.title latest_feeds << latest_feed end latest_feeds end
search(database, words, options={})
click to toggle source
# File lib/feedcellar/groonga_searcher.rb, line 22 def search(database, words, options={}) feeds = database.feeds selected_feeds = select_feeds(feeds, words, options) order = options[:reverse] ? "ascending" : "descending" sorted_feeds = selected_feeds.sort([{ :key => "date", :order => order, }]) sorted_feeds end
Private Class Methods
select_feeds(feeds, words, options)
click to toggle source
# File lib/feedcellar/groonga_searcher.rb, line 50 def select_feeds(feeds, words, options) if (words.nil? || words.empty?) && options.empty? return feeds end selected_feeds = feeds.select do |feed| expression_builder = feed if (!words.nil? && !words.empty?) or_flag = false words.each do |word| if word == "OR" or_flag = true next end if or_flag expression_builder |= (feed.title =~ word) | (feed.description =~ word) or_flag = false else expression_builder &= (feed.title =~ word) | (feed.description =~ word) end end end if options[:mtime] base_date = (Time.now - (options[:mtime] * 60 * 60 * 24)) expression_builder &= feed.date > base_date end if options[:resource] expression_builder &= feed.resource =~ options[:resource] end if options[:resource_id] expression_builder &= feed.resource._id == options[:resource_id] end if options[:year] && feeds.have_column?(:year) expression_builder &= feed.year == options[:year] end if options[:month] && feeds.have_column?(:month) expression_builder &= feed.month == options[:month] end expression_builder end selected_feeds end