Sha256: dae57840ba182f3ffcae513632f75262e64bc8b635461bdd4014d23bb52acb84

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 KB

Contents

module Gummi
  module RepositoryLayer
    module Repository
      class Result

        attr_reader :took

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

        def facets
          return unless search_result.facets
          @facets ||= begin
            result = {}
            search_result.facets.each do |(name, content)|
              result[name] = Hash[content.terms.map(&:values)]
            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

        # 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

2 entries across 2 versions & 1 rubygems

Version Path
gummi-0.3.2 lib/gummi/repository_layer/repository/result.rb
gummi-0.3.1 lib/gummi/repository_layer/repository/result.rb