Sha256: 2daaeaa0a4c9cb2394953824ff798afdaa9d4b925df03e72e76b5aa4c06d82d5

Contents?: true

Size: 1.49 KB

Versions: 17

Compression:

Stored size: 1.49 KB

Contents

require 'waistband/result'

module Waistband
  class SearchResults

    DEFAULT_PAGE_SIZE = 20

    def initialize(search_hash, options = {})
      @page = options[:page] || 1
      @page_size = options[:page_size] || DEFAULT_PAGE_SIZE
      @search_hash = search_hash
    end

    def hits
      raise ::Waistband::Errors::NoSearchHits.new("No search hits!") unless @search_hash['hits']
      @search_hash['hits']['hits']
    end

    def results
      raise ::Waistband::Errors::NoSearchHits.new("No search hits!") unless @search_hash['hits']

      hits.map do |hit|
        ::Waistband::Result.new(hit)
      end
    end

    def paginated_hits
      raise "Kaminari gem not found for pagination" unless defined?(Kaminari)
      Kaminari.paginate_array(hits, total_count: total_results).page(@page).per(@page_size)
    end

    def paginated_results
      raise "Kaminari gem not found for pagination" unless defined?(Kaminari)
      Kaminari.paginate_array(results, total_count: total_results).page(@page).per(@page_size)
    end

    def total_results
      raise ::Waistband::Errors::NoSearchHits.new("No search hits!") unless @search_hash['hits']
      @search_hash['hits']['total']
    end

    def method_missing(method_name, *args, &block)
      return @search_hash[method_name.to_s] if @search_hash.keys.include?(method_name.to_s)
      super
    end

    def respond_to_missing?(method_name, include_private = false)
      return true if @search_hash.keys.include?(method_name.to_s)
      super
    end

  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
waistband-0.12.2 lib/waistband/search_results.rb
waistband-0.12.1 lib/waistband/search_results.rb
waistband-0.11.3 lib/waistband/search_results.rb
waistband-0.11.2 lib/waistband/search_results.rb
waistband-0.11.1 lib/waistband/search_results.rb
waistband-0.11.0 lib/waistband/search_results.rb
waistband-0.10.0 lib/waistband/search_results.rb
waistband-0.9.9 lib/waistband/search_results.rb
waistband-0.9.8 lib/waistband/search_results.rb
waistband-0.9.7 lib/waistband/search_results.rb
waistband-0.9.6 lib/waistband/search_results.rb
waistband-0.9.5 lib/waistband/search_results.rb
waistband-0.9.4 lib/waistband/search_results.rb
waistband-0.9.3 lib/waistband/search_results.rb
waistband-0.9.2 lib/waistband/search_results.rb
waistband-0.9.1 lib/waistband/search_results.rb
waistband-0.9.0 lib/waistband/search_results.rb