Sha256: 690a3123559fd62976593f1bfbf249820185ae7f23f8d934cc46aa4bee99acc6

Contents?: true

Size: 1.78 KB

Versions: 7

Compression:

Stored size: 1.78 KB

Contents

module Sunspot
  module Search
    class QueryFacet
      RequestedFacet = Struct.new(:label, :boolean_phrase) #:nodoc:

      attr_reader :name

      def initialize(name, search, options) #:nodoc:
        @name, @search, @options = name, search, options
        @requested_facets = []
      end

      def rows(options = {})
        @rows ||=
          begin
            data = @search.facet_response['facet_queries']
            rows = []
            minimum_count =
              case
              when @options[:minimum_count] then @options[:minimum_count]
              when @options[:zeros] then 0
              else 1
              end
            @requested_facets.each do |requested_facet|
              count = data[requested_facet.boolean_phrase] || 0
              if count >= minimum_count
                rows << FacetRow.new(requested_facet.label, count, self)
              end
            end
            sort_rows!(rows)
          end
      end

      def add_row(label, boolean_phrase) #:nodoc:
        @requested_facets << RequestedFacet.new(label, boolean_phrase)
      end

      private

      def sort_rows!(rows)
        case @options[:sort] || (:count if @options[:limit])
        when :count
          rows.sort! { |lrow, rrow| rrow.count <=> lrow.count }
        when :index
          rows.sort! do |lrow, rrow|
            if lrow.respond_to?(:<=>)
              lrow.value <=> rrow.value
            elsif lrow.respond_to?(:first) && rrow.respond_to?(:first) && lrow.first.respond_to?(:<=>)
              lrow.first.value <=> rrow.first.value
            else
              lrow.value.to_s <=> rrow.value.to_s
            end
          end
        end
        if @options[:limit]
          rows.replace(rows.first(@options[:limit]))
        end
        rows
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 3 rubygems

Version Path
ruben-sunspot-1.1.4 lib/sunspot/search/query_facet.rb
ruben-sunspot-1.1.3 lib/sunspot/search/query_facet.rb
ruben-sunspot-1.1.2 lib/sunspot/search/query_facet.rb
ruben-sunspot-1.1.1 lib/sunspot/search/query_facet.rb
ruben-sunspot-1.1.0 lib/sunspot/search/query_facet.rb
nuatt_sunspot-1.1.0.3 lib/sunspot/search/query_facet.rb
sunspot-1.1.0 lib/sunspot/search/query_facet.rb