Sha256: 6244becfb08d2171c4d3ea9ef5993ac8ae01bbce79c771b0c0ab970ec8882e89

Contents?: true

Size: 1.63 KB

Versions: 25

Compression:

Stored size: 1.63 KB

Contents

module Elastics
  class Result
    module SearchLoader

      # extend if result is a Search or MultiGet
      def self.should_extend?(result)
        result.is_a?(Search) || result.is_a?(MultiGet)
      end

      # extend the collection on extend
      def self.extended(result)
        result.collection.each { |h| h.extend(DocumentLoader) }
      end

      def loaded_collection
        @loaded_collection ||= begin
                                 records  = []
                                 # returns a structure like {Comment=>[{"_id"=>"123", ...}, {...}], BlogPost=>[...]}
                                 h = Utils.group_array_by(collection) do |d|
                                   d.model_class
                                 end
                                 h.each do |klass, docs|
                                   records |= klass.find(docs.map(&:_id))
                                 end
                                 class_ids = collection.map { |d| [d.model_class.to_s,  d._id] }
                                 # Reorder records to preserve order from search results
                                 records = class_ids.map do |class_str, id|
                                   records.detect do |record|
                                     record.class.to_s == class_str && record.id.to_s == id.to_s
                                   end
                                 end
                                 records.extend Struct::Paginable
                                 records.setup(collection.total_entries, variables)
                                 records
                               end
      end

    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
elastics-models-1.3.3 lib/elastics/result/search_loader.rb
elastics-models-1.3.2 lib/elastics/result/search_loader.rb
elastics-models-1.3.1 lib/elastics/result/search_loader.rb
elastics-models-1.3.0 lib/elastics/result/search_loader.rb
elastics-models-1.2.1 lib/elastics/result/search_loader.rb
elastics-models-1.2.0 lib/elastics/result/search_loader.rb
elastics-models-1.1.11 lib/elastics/result/search_loader.rb
elastics-models-1.1.10 lib/elastics/result/search_loader.rb
elastics-models-1.1.9 lib/elastics/result/search_loader.rb
elastics-models-1.1.8 lib/elastics/result/search_loader.rb
elastics-models-1.1.7 lib/elastics/result/search_loader.rb
elastics-models-1.1.6 lib/elastics/result/search_loader.rb
elastics-models-1.1.5 lib/elastics/result/search_loader.rb
elastics-models-1.1.4 lib/elastics/result/search_loader.rb
elastics-models-1.1.3 lib/elastics/result/search_loader.rb
elastics-models-1.1.2 lib/elastics/result/search_loader.rb
elastics-models-1.1.1 lib/elastics/result/search_loader.rb
elastics-models-1.1.0 lib/elastics/result/search_loader.rb
elastics-models-1.0.10 lib/elastics/result/search_loader.rb
elastics-models-1.0.9 lib/elastics/result/search_loader.rb