Sha256: 31578683c73db0301db59246bb5b147b2f52d70863842a4c1081cd231de52e4c

Contents?: true

Size: 1.29 KB

Versions: 2

Compression:

Stored size: 1.29 KB

Contents

module Feedcellar
  class GroongaSearcher
    class << self
      def search(database, words, options)
        feeds = database.feeds
        feeds = feeds.select do |feed|
          expression = nil
          words.each do |word|
            sub_expression = (feed.title =~ word) |
                             (feed.description =~ word)
            if expression.nil?
              expression = sub_expression
            else
              expression &= sub_expression
            end
          end

          if options[:mtime]
            base_date = (Time.now - (options[:mtime] * 60 * 60 * 24))
            mtime_expression = feed.date > base_date
            if expression.nil?
              expression = mtime_expression
            else
              expression &= mtime_expression
            end
          end

          if options[:resource]
            resource_expression = feed.resource =~ options[:resource]
            if expression.nil?
              expression = resource_expression
            else
              expression &= resource_expression
            end
          end

          expression
        end

        order = options[:reverse] ? "ascending" : "descending"
        sorted_feeds = feeds.sort([{:key => "date", :order => order}])

        sorted_feeds
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
feedcellar-0.3.2 lib/feedcellar/groonga_searcher.rb
feedcellar-0.3.1 lib/feedcellar/groonga_searcher.rb