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