Module: Globalize::ActiveRecord::ClassMethods

Defined in:
lib/globalize/active_record/class_methods.rb

Instance Method Summary collapse

Instance Method Details

#columns_hashObject



7
8
9
# File 'lib/globalize/active_record/class_methods.rb', line 7

def columns_hash
  super.except(*translated_attribute_names.map(&:to_s))
end

#required_attributesObject



41
42
43
44
# File 'lib/globalize/active_record/class_methods.rb', line 41

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_attributesObject



46
47
48
49
# File 'lib/globalize/active_record/class_methods.rb', line 46

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) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/globalize/active_record/class_methods.rb', line 37

def translated?(name)
  translated_attribute_names.include?(name.to_sym)
end

#translated_column_name(name) ⇒ Object



72
73
74
# File 'lib/globalize/active_record/class_methods.rb', line 72

def translated_column_name(name)
  "#{translation_class.table_name}.#{name}"
end

#translation_classObject



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/globalize/active_record/class_methods.rb', line 51

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],
      inverse_of: :translations,
      touch: translation_options.fetch(:touch, false)
    klass
  end
end

#translations_table_nameObject



68
69
70
# File 'lib/globalize/active_record/class_methods.rb', line 68

def translations_table_name
  translation_class.table_name
end

#with_locales(*locales) ⇒ Object



12
13
14
# File 'lib/globalize/active_record/class_methods.rb', line 12

def with_locales(*locales)
  all.merge translation_class.with_locales(*locales)
end

#with_required_attributesObject



23
24
25
26
27
28
# File 'lib/globalize/active_record/class_methods.rb', line 23

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) ⇒ Object



30
31
32
33
34
35
# File 'lib/globalize/active_record/class_methods.rb', line 30

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) ⇒ Object



16
17
18
19
20
21
# File 'lib/globalize/active_record/class_methods.rb', line 16

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