module Globalize::ActiveRecord::ActMacro
Public Instance Methods
class_name()
click to toggle source
# File lib/globalize/active_record/act_macro.rb, line 16 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 23 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 29 def allow_translation_of_attributes(attr_names) attr_names.each do |attr_name| # Detect and apply serialization. enable_serializable_attribute(attr_name) if ::ActiveRecord::VERSION::STRING >= "5.0.0" # use virtual attribute attribute attr_name, :string end # 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 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 => true before_create :save_translations! before_update :save_translations! end