module Sequel::Plugins::Localize::ClassMethods

Public Instance Methods

_init_translations() click to toggle source
# File lib/sequel/localize.rb, line 15
def _init_translations
  @@_lowercase_name = underscore(demodulize(self.to_s))
  create_translation_class
  create_translated_field_methods
  create_translation_accessors
end
add_translation_accessors(code) click to toggle source
# File lib/sequel/localize.rb, line 27
def add_translation_accessors(code)
  create_translation_writer(code)
  create_translation_reader(code)
end
localized_fields() click to toggle source
# File lib/sequel/localize.rb, line 21
def localized_fields
  @@localized_fields ||= translation_class.columns - [translation_class.primary_key, :"#{@@_lowercase_name}_id", :language_id]
end
translation_class() click to toggle source
# File lib/sequel/localize.rb, line 24
def translation_class
  @@translation_class ||= Object.const_get("#{self}Translation")
end

Protected Instance Methods

create_translated_field_methods() click to toggle source
# File lib/sequel/localize.rb, line 46
        def create_translated_field_methods
          localized_fields.each do |field_name|
            self.class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
            def #{field_name}(locale = I18n.site_locale)
              (translation(locale) || translation(default_locale)).#{field_name}
            end
            def #{field_name}=(value, locale)
              translation(locale).#{field_name}= value
            end
            RUBY
          end
        end
create_translation_accessors() click to toggle source
# File lib/sequel/localize.rb, line 58
def create_translation_accessors
  Language.all.each do |l|
    create_translation_writer(l.code)
    create_translation_reader(l.code)
  end
end
create_translation_class() click to toggle source
# File lib/sequel/localize.rb, line 34
        def create_translation_class
          one_to_many :"#{@@_lowercase_name}_translations"
          alias_method :translations_dataset, :"#{@@_lowercase_name}_translations_dataset"
          alias_method :translations, :"#{@@_lowercase_name}_translations"
          alias_method :add_translation, :"add_#{@@_lowercase_name}_translation"
          self.class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
          class ::#{self}Translation < Sequel::Model
            many_to_one :#{@@_lowercase_name}
            many_to_one :language
          end
          RUBY
        end
create_translation_reader(locale) click to toggle source
# File lib/sequel/localize.rb, line 76
        def create_translation_reader(locale)
          self.class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
          def #{locale}
            translation :#{locale}
          end
          RUBY
        end
create_translation_writer(locale) click to toggle source
# File lib/sequel/localize.rb, line 65
        def create_translation_writer(locale)
          self.class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
          def #{locale}=(attributes = {})
            attributes.each do |method, value|
              modified!
              self.send :"\#{method}=", value, :#{locale}
            end
          end
          RUBY
        end