module Globalize::ActiveRecord::ClassMethods
Public Instance Methods
required_attributes()
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 39 def required_attributes warn 'required_attributes is deprecated and will be removed in the next release of Globalize.' validators.map { |v| v.attributes if v.is_a?(ActiveModel::Validations::PresenceValidator) }.flatten end
required_translated_attributes()
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 44 def required_translated_attributes warn 'required_translated_attributes is deprecated and will be removed in the next release of Globalize.' translated_attribute_names & required_attributes end
translated?(name)
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 35 def translated?(name) translated_attribute_names.include?(name.to_sym) end
translated_column_name(name)
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 66 def translated_column_name(name) "#{translation_class.table_name}.#{name}" end
translation_class()
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 49 def translation_class @translation_class ||= begin if self.const_defined?(:Translation, false) klass = self.const_get(:Translation, false) else klass = self.const_set(:Translation, Class.new(Globalize::ActiveRecord::Translation)) end klass.belongs_to :globalized_model, :class_name => self.name, :foreign_key => translation_options[:foreign_key] klass end end
translations_table_name()
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 62 def translations_table_name translation_class.table_name end
with_locales(*locales)
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 6 def with_locales(*locales) all.merge translation_class.with_locales(*locales) end
with_required_attributes()
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 21 def with_required_attributes warn 'with_required_attributes is deprecated and will be removed in the next release of Globalize.' required_translated_attributes.inject(all) do |scope, name| scope.where("#{translated_column_name(name)} IS NOT NULL") end end
with_translated_attribute(name, value, locales = Globalize.fallbacks)
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 28 def with_translated_attribute(name, value, locales = Globalize.fallbacks) with_translations.where( translated_column_name(name) => value, translated_column_name(:locale) => Array(locales).map(&:to_s) ) end
with_translations(*locales)
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 14 def with_translations(*locales) locales = translated_locales if locales.empty? preload(:translations).joins(:translations).readonly(false).with_locales(locales).tap do |query| query.distinct! unless locales.flatten.one? end end
with_where(opts = {})
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 10 def with_where(opts = {}) all.merge translation_class.where(opts) end
Protected Instance Methods
define_translated_attr_accessor(name)
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 94 def define_translated_attr_accessor(name) define_translated_attr_reader(name) define_translated_attr_writer(name) end
define_translated_attr_reader(name)
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 81 def define_translated_attr_reader(name) define_method(name) do |*args| Globalize::Interpolation.interpolate(name, self, args) end alias_method :"#{name}_before_type_cast", name end
define_translated_attr_writer(name)
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 88 def define_translated_attr_writer(name) define_method(:"#{name}=") do |value| write_attribute(name, value) end end
define_translations_accessor(name)
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 116 def define_translations_accessor(name) define_translations_reader(name) define_translations_writer(name) end
define_translations_reader(name)
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 99 def define_translations_reader(name) define_method(:"#{name}_translations") do hash = translated_attribute_by_locale(name) globalize.stash.keys.each_with_object(hash) do |locale, result| result[locale] = globalize.fetch_stash(locale, name) if globalize.stash_contains?(locale, name) end end end
define_translations_writer(name)
click to toggle source
# File lib/globalize/active_record/class_methods.rb, line 108 def define_translations_writer(name) define_method(:"#{name}_translations=") do |value| value.each do |(locale, _value)| write_attribute name, _value, :locale => locale end end end
Private Instance Methods
relation()
click to toggle source
Override the default relation method in order to return a subclass of ActiveRecord::Relation with custom finder methods for translated attributes.
Calls superclass method
# File lib/globalize/active_record/class_methods.rb, line 75 def relation super.extending!(QueryMethods) end