Class: ActiveSearch::Mongoid::Model

Inherits:
Object
  • Object
show all
Includes:
Mongoid::Document
Defined in:
lib/activesearch/mongoid/model.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.deindex(original) ⇒ Object



55
56
57
# File 'lib/activesearch/mongoid/model.rb', line 55

def self.deindex(original)
  ActiveSearch::Mongoid::Model.where(_original_type: original.class.to_s, _original_id: original.id).destroy
end

.reindex(original, fields, options) ⇒ Object



59
60
61
62
63
64
# File 'lib/activesearch/mongoid/model.rb', line 59

def self.reindex(original, fields, options)
  doc = find_or_initialize_by(_original_type: original.class.to_s, _original_id: original.id)
  doc.store_fields(original, fields, options)
  doc.refresh_keywords(original, fields)
  doc.save
end

Instance Method Details

#refresh_keywords(original, fields) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/activesearch/mongoid/model.rb', line 29

def refresh_keywords(original, fields)
  self._keywords = fields.select { |f| original.fields[f.to_s] }.inject([]) do |memo,f|
    
    if original.fields[f.to_s].localized?
      memo += original.send("#{f}_translations").map do |locale,translation|
        next if translation.nil?
        translation.downcase.split.map { |word| "#{locale}:#{word}"}
      end.flatten
    else
      if original[f]
        memo += if original[f].is_a?(Array)
          original[f].map { |value| value.nil? ? nil : value.downcase }
        else
          original[f].downcase.split
        end
        
      else
        memo
      end
    end
  end
  
  self._keywords = self._keywords.map! { |k| ActiveSearch.strip_tags(k) }
  self._keywords.uniq!
end

#store_fields(original, fields, options) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/activesearch/mongoid/model.rb', line 15

def store_fields(original, fields, options)
  if options && options[:store]
    self._stored = {}
    options[:store].each do |f|
      
      if original.fields[f.to_s] && original.fields[f.to_s].localized?
        self._stored[f] = original.send("#{f}_translations")
      else
        self._stored[f] = original.send(f) if original.send(f).present?
      end
    end
  end
end