Module: AbAdmin::Concerns::TranslationsMacro

Defined in:
lib/ab_admin/concerns/translations_macro.rb

Defined Under Namespace

Modules: ClassMethods, InstanceMethods

Instance Method Summary collapse

Instance Method Details

#add_translated_attributes(attr_names) ⇒ Object



21
22
23
24
25
26
# File 'lib/ab_admin/concerns/translations_macro.rb', line 21

def add_translated_attributes(attr_names)
  attr_names.each do |attr_name|
    define_translation_accessors(attr_name)
    self.translated_attribute_names << attr_name
  end
end

#class_nameObject



40
41
42
# File 'lib/ab_admin/concerns/translations_macro.rb', line 40

def class_name
  name.split('::').last
end

#define_translation_accessors(attr_name) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/ab_admin/concerns/translations_macro.rb', line 28

def define_translation_accessors(attr_name)
  define_method("#{attr_name}_translation") { translation_for_locale(I18n.locale).try!(:send, attr_name) }
  define_method("#{attr_name}_translation=") {|v| translation_for_locale(I18n.locale).try!(:send, "#{attr_name}=", v) }
  alias_method attr_name, "#{attr_name}_translation"
  alias_method "#{attr_name}=", "#{attr_name}_translation="
  define_method("#{attr_name}_default"){ translation_for_locale(I18n.default_locale).try!(:send, attr_name) }
  AbAdmin.translated_locales.each do |l|
    define_method("#{attr_name}_#{l}") {translation_for_locale(l).try!(:send, attr_name)}
    define_method("#{attr_name}_#{l}=") {|v| translation_for_locale(l).try!(:send, "#{attr_name}=", v)}
  end
end

#setup_translations(options) ⇒ Object



10
11
12
13
14
15
16
17
18
19
# File 'lib/ab_admin/concerns/translations_macro.rb', line 10

def setup_translations(options)
  include InstanceMethods
  extend ClassMethods

  class_attribute :translated_attribute_names, :translation_options
  self.translated_attribute_names = []
  self.translation_options = options

  has_many :translations, class_name: translation_class.name, foreign_key: class_name.foreign_key, dependent: :destroy, autosave: true, inverse_of: :translated_model
end

#translates(*attr_names) ⇒ Object



4
5
6
7
8
# File 'lib/ab_admin/concerns/translations_macro.rb', line 4

def translates(*attr_names)
  options = attr_names.extract_options!
  setup_translations(options) unless translates?
  add_translated_attributes(attr_names.map(&:to_sym) - translated_attribute_names)
end

#translates?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/ab_admin/concerns/translations_macro.rb', line 44

def translates?
  included_modules.include?(InstanceMethods)
end