module Elasticsearch::Model::Globalize::OneIndexPerLanguage

Public Class Methods

included(base) click to toggle source
# File lib/elasticsearch/model/globalize/one_index_per_language.rb, line 6
def self.included(base)
  base.class_eval do
    self.__elasticsearch__.class_eval do
      include Elasticsearch::Model::Globalize::OneIndexPerLanguage::ClassMethods
    end

    class << self
      [:globalized_mapping, :globalized_mappings, :import_globally, :index_name_base, :index_name_base=, :document_type_base, :document_type_base=].each do |m|
        delegate m, to: :__elasticsearch__
      end
    end

    def __elasticsearch__ &block
      unless @__elasticsearch__
        @__elasticsearch__ = ::Elasticsearch::Model::Proxy::InstanceMethodsProxy.new(self)
        @__elasticsearch__.extend Elasticsearch::Model::Globalize::OneIndexPerLanguage::InstanceMethods
      end
      @__elasticsearch__.instance_eval(&block) if block_given?
      @__elasticsearch__
    end

    before_update :update_existence_of_documents
    before_save   :update_changed_attributes_by_locale
  end
end
localized_name(name=nil, locale=nil, &block) click to toggle source
# File lib/elasticsearch/model/globalize/one_index_per_language.rb, line 32
def self.localized_name(name=nil, locale=nil, &block)
  @localizer = block if block_given?

  @localizer ? @localizer.call(name, locale) : "#{name}-#{locale}"
end

Public Instance Methods

__elasticsearch__(&block) click to toggle source
# File lib/elasticsearch/model/globalize/one_index_per_language.rb, line 18
def __elasticsearch__ &block
  unless @__elasticsearch__
    @__elasticsearch__ = ::Elasticsearch::Model::Proxy::InstanceMethodsProxy.new(self)
    @__elasticsearch__.extend Elasticsearch::Model::Globalize::OneIndexPerLanguage::InstanceMethods
  end
  @__elasticsearch__.instance_eval(&block) if block_given?
  @__elasticsearch__
end
update_changed_attributes_by_locale() click to toggle source
# File lib/elasticsearch/model/globalize/one_index_per_language.rb, line 222
def update_changed_attributes_by_locale
  __elasticsearch__.changed_attributes_by_locale.clear

  common_changed_attributes = Hash[ changes.map{ |key, value| [key, value.last] } ]
  translated_attribute_names.each { |k| common_changed_attributes.delete(k) }

  globalize.stash.reject{ |locale, attrs| attrs.empty? }.each do |locale, attrs|
    __elasticsearch__.changed_attributes_by_locale[locale] = attrs.merge(common_changed_attributes)
  end
  true
end
update_existence_of_documents() click to toggle source

This method actually checks existence of translations in database Therefore, database and elasticsearch must be synced.

# File lib/elasticsearch/model/globalize/one_index_per_language.rb, line 214
def update_existence_of_documents
  __elasticsearch__.existence_of_documents.clear
  translations.each do |t|
    __elasticsearch__.existence_of_documents[t.locale] = true if t.persisted?
  end
  true
end