Module: Flex::Result::SearchLoader

Defined in:
lib/flex/result/search_loader.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(result) ⇒ Object

extend the collection on extend



11
12
13
# File 'lib/flex/result/search_loader.rb', line 11

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

.should_extend?(result) ⇒ Boolean

extend if result is a Search or MultiGet

Returns:

  • (Boolean)


6
7
8
# File 'lib/flex/result/search_loader.rb', line 6

def self.should_extend?(result)
  result.is_a?(Search) || result.is_a?(MultiGet)
end

Instance Method Details

#loaded_collectionObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/flex/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