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

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