module Globalize::ActiveRecord::ActMacro

Public Instance Methods

class_name() click to toggle source
# File lib/globalize/active_record/act_macro.rb, line 17
def class_name
  @class_name ||= begin
    class_name = table_name[table_name_prefix.length..-(table_name_suffix.length + 1)].downcase.camelize
    pluralize_table_names ? class_name.singularize : class_name
  end
end
translates(*attr_names) click to toggle source
# File lib/globalize/active_record/act_macro.rb, line 4
def translates(*attr_names)
  options = attr_names.extract_options!
  # Bypass setup_translates! if the initial bootstrapping is done already.
  setup_translates!(options) unless translates?


  # Add any extra translatable attributes.
  attr_names = attr_names.map(&:to_sym)
  attr_names -= translated_attribute_names if defined?(translated_attribute_names)

  allow_translation_of_attributes(attr_names) if attr_names.present?
end
translates?() click to toggle source
# File lib/globalize/active_record/act_macro.rb, line 24
def translates?
  included_modules.include?(InstanceMethods)
end

Protected Instance Methods

allow_translation_of_attributes(attr_names) click to toggle source
# File lib/globalize/active_record/act_macro.rb, line 30
def allow_translation_of_attributes(attr_names)
  attr_names.each do |attr_name|
    # Detect and apply serialization.
    enable_serializable_attribute(attr_name)

    # Create accessors for the attribute.
    define_translated_attr_accessor(attr_name)
    define_translations_accessor(attr_name)

    # Add attribute to the list.
    self.translated_attribute_names << attr_name
  end
  if ::ActiveRecord::VERSION::STRING > "5.0" && connected? && table_exists? && translation_class.table_exists?
    self.ignored_columns += translated_attribute_names.map(&:to_s)
    reset_column_information
  end
end
apply_globalize_options(options) click to toggle source
# File lib/globalize/active_record/act_macro.rb, line 48
def apply_globalize_options(options)
  options[:table_name] ||= "#{table_name.singularize}_translations"
  options[:foreign_key] ||= class_name.foreign_key

  class_attribute :translated_attribute_names, :translation_options, :fallbacks_for_empty_translations
  self.translated_attribute_names = []
  self.translation_options        = options
  self.fallbacks_for_empty_translations = options[:fallbacks_for_empty_translations]
end
enable_serializable_attribute(attr_name) click to toggle source
# File lib/globalize/active_record/act_macro.rb, line 58
def enable_serializable_attribute(attr_name)
  serializer = self.globalize_serialized_attributes[attr_name]
  if serializer.present?
    if defined?(::ActiveRecord::Coders::YAMLColumn) &&
      serializer.is_a?(::ActiveRecord::Coders::YAMLColumn)
      serializer = serializer.object_class
    end

    translation_class.send :serialize, attr_name, serializer
  end
end
setup_translates!(options) click to toggle source
# File lib/globalize/active_record/act_macro.rb, line 70
def setup_translates!(options)
  apply_globalize_options(options)

  include InstanceMethods
  extend  ClassMethods, Migration

  translation_class.table_name = options[:table_name]

  has_many :translations, :class_name  => translation_class.name,
                          :foreign_key => options[:foreign_key],
                          :dependent   => :destroy,
                          :extend      => HasManyExtensions,
                          :autosave    => false,
                          :inverse_of  => :globalized_model

  after_create :save_translations!
  after_update :save_translations!
end