Sha256: 846a1e1acba21ad66ac276d83841bd7a554f9572952076f2ae1c11192f3f7e36

Contents?: true

Size: 1 KB

Versions: 1

Compression:

Stored size: 1 KB

Contents

module Lunar
  class Search
    attr :sets, :prefix, :search_identifier

    def initialize(prefix, keywords)
      if keywords.is_a?(Hash)
        @sets = keywords.inject([]) { |a, (field, query)| a | Sets.new(prefix, query, field) }
        @search_identifier = keywords.hash
      else
        @sets = Sets.new(prefix, keywords)
        @search_identifier = keywords.hash
      end

      @prefix = prefix

      # Default finder, uses Ohm style finding
      @finder = lambda { |id| prefix[id] }
    end

    def results(&block)
      Lunar.redis.zunion dist_key, sets.size, *sets
      
      if block_given?
        ResultSet.new(dist_key, &block)
      else
        ResultSet.new(dist_key, &@finder)
      end

      # ids = Lunar.redis.zrevrange dist_key, start, finish

      # if block_given?
      #   ids.map { |e| block.call(e) }
      # else
      #   ids.map { |e| @@finder.call(prefix, e) }
      # end
    end
  
  protected
    def dist_key
      Lunar.nest[:Results][search_identifier]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lunar-0.1.1 lib/lunar/search.rb