module HstoreTranslate::Translates

Constants

SUFFIX

Public Instance Methods

translates(*attrs) click to toggle source
# File lib/hstore_translate/translates.rb, line 5
def translates(*attrs)
  include InstanceMethods

  class_attribute :translated_attribute_names, :permitted_translated_attributes

  self.translated_attribute_names = attrs
  self.permitted_translated_attributes = [
    *self.ancestors
      .select {|klass| klass.respond_to?(:permitted_translated_attributes) }
      .map(&:permitted_translated_attributes),
    *attrs.product(I18n.available_locales)
      .map { |attribute, locale| :"#{attribute}_#{locale}" }
  ].flatten.compact

  attrs.each do |attr_name|
    serialize "#{attr_name}#{SUFFIX}", ActiveRecord::Coders::Hstore unless HstoreTranslate::native_hstore?

    define_method attr_name do
      read_hstore_translation(attr_name)
    end

    define_method "#{attr_name}=" do |value|
      write_hstore_translation(attr_name, value)
    end

    define_singleton_method "with_#{attr_name}_translation" do |value, locale = I18n.locale|
      quoted_translation_store = connection.quote_column_name("#{attr_name}#{SUFFIX}")
      where("#{quoted_translation_store} @> hstore(:locale, :value)", locale: locale, value: value)
    end
  end

  send(:prepend, ActiveRecordWithHstoreTranslate)
end
translates?() click to toggle source
# File lib/hstore_translate/translates.rb, line 39
def translates?
  included_modules.include?(InstanceMethods)
end