class Vulgata::Strategies::LocaleColumnTranslations

Public Class Methods

new(translation_identifier_attribute, translated_attributes) click to toggle source
# File lib/vulgata/strategies/locale_column_translations.rb, line 5
def initialize(translation_identifier_attribute, translated_attributes)
  @translation_identifier_attribute = translation_identifier_attribute
  @translated_attributes = translated_attributes
end

Public Instance Methods

save_translation(translation_state) click to toggle source

saves a single translation

# File lib/vulgata/strategies/locale_column_translations.rb, line 11
def save_translation translation_state
  resource = translation_state.source_translation_state.item_type.constantize.find_or_initialize_by(:locale => translation_state.locale, @translation_identifier_attribute => translation_state.item[@translation_identifier_attribute])
  resource.vlg_skip_init = true
  resource.vlg_skip_pendify = true
  resource.attributes = translation_state.translation_data
  resource.save(validate: false)
end
scope_by_source_items(items) click to toggle source

when translations are stored in the same table the sources are distincted by the locale

# File lib/vulgata/strategies/locale_column_translations.rb, line 20
def scope_by_source_items items
  items.where(locale: I18n.default_locale)
end
source_translation(instance) click to toggle source

returns the source translation data hash with locale key-value pair

# File lib/vulgata/strategies/locale_column_translations.rb, line 25
def source_translation instance
  instance.class.find_by(:locale => I18n.default_locale, @translation_identifier_attribute => instance[@translation_identifier_attribute])
end
translated_attribute_names(klass) click to toggle source

returns array of translated attribute name (i.e [:title, :body])

# File lib/vulgata/strategies/locale_column_translations.rb, line 43
def translated_attribute_names klass
  @translated_attributes
end
translation_data(translation_state) click to toggle source

returns the translation data in a form of { attr1_name: attr1_value, attr2_name: attr2_value }

# File lib/vulgata/strategies/locale_column_translations.rb, line 35
def translation_data translation_state
  if data = translation_data_with_meta(translation_state)
    return data.slice(*@translated_attributes).with_indifferent_access
  end
  nil
end
translation_data_changed?(instance) click to toggle source

checks if a translated attribute is changed

# File lib/vulgata/strategies/locale_column_translations.rb, line 53
def translation_data_changed? instance
  translated_attributes = @translated_attributes.map(&:to_s)
  instance.changed.select{ |attr| translated_attributes.include?(attr) }.any?
end
translation_data_with_meta(translation_state) click to toggle source

returns the translation data along with some meta data (locale, timestamps)

# File lib/vulgata/strategies/locale_column_translations.rb, line 30
def translation_data_with_meta translation_state
  translation_state.item_class.find_by(:locale => translation_state.locale, @translation_identifier_attribute => translation_state.item[@translation_identifier_attribute])
end
where_like_query(klass, query, query_params, collection) click to toggle source
# File lib/vulgata/strategies/locale_column_translations.rb, line 47
def where_like_query klass, query, query_params, collection
  query = query % { table_name: klass.table_name }
  (collection ||= klass).where(query, query_params)
end