module Elasticsearch::Model::Globalize::MultipleFields

Public Class Methods

included(base) click to toggle source
# File lib/elasticsearch/model/globalize/multiple_fields.rb, line 5
        def self.included(base)
          base.class_eval do
            class << self
              def locales
                @locales ||= I18n.available_locales
              end
            end

            locales.each do |locale|
              translated_attribute_names.each do |name|
                localized_name = MultipleFields.localized_name(name, locale)

                class_eval <<-METHOD, __FILE__, __LINE__ + 1 # Define getter
                def #{localized_name}
                  globalize.stash.contains?(:#{locale}, '#{name}') ? globalize.stash[:#{locale}]['#{name}']
                                                                   : translation_for(:#{locale}, false).try(:read_attribute, '#{name}')
                end
                METHOD

                class_eval <<-METHOD, __FILE__, __LINE__ + 1 # Define setter
                def #{localized_name}=(val)
                  attribute_will_change!(:#{localized_name})
                  write_attribute('#{name}', val, locale: :#{locale})
                end
                METHOD
              end
            end

            translated_attribute_names.each do |name|
              class_eval <<-METHOD, __FILE__, __LINE__ + 1
              def #{name}=(val)
                attribute_will_change!(::Elasticsearch::Model::Globalize::MultipleFields.localized_name('#{name}', ::Globalize.locale))
                write_attribute('#{name}', val)
              end
              METHOD
            end

            def __elasticsearch__ &block
              unless @__elasticsearch__
                @__elasticsearch__ = ::Elasticsearch::Model::Proxy::InstanceMethodsProxy.new(self)
                @__elasticsearch__.extend Elasticsearch::Model::Globalize::MultipleFields::InstanceMethods
              end
              @__elasticsearch__.instance_eval(&block) if block_given?
              @__elasticsearch__
            end
          end
        end
locales() click to toggle source
# File lib/elasticsearch/model/globalize/multiple_fields.rb, line 8
def locales
  @locales ||= I18n.available_locales
end
localized_name(name=nil, locale=nil, &block) click to toggle source
# File lib/elasticsearch/model/globalize/multiple_fields.rb, line 53
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/multiple_fields.rb, line 42
def __elasticsearch__ &block
  unless @__elasticsearch__
    @__elasticsearch__ = ::Elasticsearch::Model::Proxy::InstanceMethodsProxy.new(self)
    @__elasticsearch__.extend Elasticsearch::Model::Globalize::MultipleFields::InstanceMethods
  end
  @__elasticsearch__.instance_eval(&block) if block_given?
  @__elasticsearch__
end