Sha256: c0b2c75cfd1cb489eae2f08a988e8f5ac44aca87f17786e5700d7316b89a3e27

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

module Gummi
  module RepositoryLayer
    module Repository
      class Result

        attr_reader :took

        def initialize(search_result, converter)
          @success       = search_result.success?
          @search_result = search_result
          @took          = @search_result.took      if @search_result
          @documents     = @search_result.documents if @search_result
          @converter     = converter
        end

        def facets
          return unless search_result.facets
          @facets ||= begin
            result = {}
            search_result.facets.each do |(name, content)|
              case content['_type']
              when 'terms'
                result[name] = Hash[content.terms.map(&:values)]
              when 'statistical'
                result[name] = Hash[content.map(&:values)]
              end
            end
            Hashie::Mash.new result
          end
        end

        def records
          @records ||= begin
            # Passing through the Leaflet Collection, but converting the records.
            documents.map! { |document| converter.db_instance_to_entity(document) }
            documents
          end
        end

        def success?
          @success
        end

        # Leaflet::Collection has many methods we want to make use of.
        # E.g. kaminari and will_paginate support.
        # Also, we want to have Enumerable and #decorate at our fingertips.
        #
        def method_missing(method_name, *args)
          records.send method_name, *args
        end

        private

        attr_reader :search_result, :converter, :documents

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gummi-0.3.10 lib/gummi/repository_layer/repository/result.rb