Sha256: 902a2bd7cf80d7bf3b37866b906049442ecf2b09e26d4da122b4fc18fb3b1f62

Contents?: true

Size: 1.67 KB

Versions: 6

Compression:

Stored size: 1.67 KB

Contents

module ActiveSearch
  module Mongoid
    class Model
      include ::Mongoid::Document
      
      field :_original_type, type: String
      field :_original_id, type: BSON::ObjectId
      field :_keywords
      field :_stored, type: Hash, default: {}
      
      index :_keywords
      index [:_original_type, :_original_id], unique: true
      
      def to_hash
        _stored
      end
      
      def store_fields(original, fields, options)
        if options && options[:store]
          options[:store].each do |f|
            self._stored[f] = original[f] if original.send("#{f}_changed?")
          end
        end
      end
      
      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|
              translation.downcase.split.map { |word| "#{locale}:#{word}"}
            end.flatten
          else
            original[f] ? memo += original[f].downcase.split : memo
          end
        end
        self._keywords.uniq!
      end
      
      def self.deindex(original)
        ActiveSearch::Mongoid::Model.where(_original_type: original.class.to_s, _original_id: original.id).destroy
      end
      
      def self.reindex(original, fields, options)
        return unless fields.any? { |f| original.send("#{f}_changed?") }
        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
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
activesearch-0.0.9 lib/activesearch/mongoid/model.rb
activesearch-0.0.8 lib/activesearch/mongoid/model.rb
activesearch-0.0.7 lib/activesearch/mongoid/model.rb
activesearch-0.0.6 lib/activesearch/mongoid/model.rb
activesearch-0.0.5 lib/activesearch/mongoid/model.rb
activesearch-0.0.4 lib/activesearch/mongoid/model.rb