module Elastics::Result::SearchLoader

Public Class Methods

extended(result) click to toggle source

extend the collection on extend

# File lib/elastics/result/search_loader.rb, line 11
def self.extended(result)
  result.collection.each { |h| h.extend(DocumentLoader) }
end
should_extend?(result) click to toggle source

extend if result is a Search or MultiGet

# File lib/elastics/result/search_loader.rb, line 6
def self.should_extend?(result)
  result.is_a?(Search) || result.is_a?(MultiGet)
end

Public Instance Methods

loaded_collection() click to toggle source
# File lib/elastics/result/search_loader.rb, line 15
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