class Globalize::ActiveRecord::Adapter
Attributes
record[RW]
The cache caches attributes that already were looked up for read access. The stash keeps track of new or changed values that need to be saved.
stash[RW]
The cache caches attributes that already were looked up for read access. The stash keeps track of new or changed values that need to be saved.
Public Class Methods
new(record)
click to toggle source
# File lib/globalize/active_record/adapter.rb, line 11 def initialize(record) @record = record @stash = Attributes.new end
Public Instance Methods
fetch(locale, name)
click to toggle source
# File lib/globalize/active_record/adapter.rb, line 23 def fetch(locale, name) record.globalize_fallbacks(locale).each do |fallback| value = stash.contains?(fallback, name) ? fetch_stash(fallback, name) : fetch_attribute(fallback, name) unless fallbacks_for?(value) set_metadata(value, :locale => fallback, :requested_locale => locale) return value end end return nil end
fetch_stash(locale, name)
click to toggle source
# File lib/globalize/active_record/adapter.rb, line 16 def fetch_stash(locale, name) stash.read(locale, name) end
reset()
click to toggle source
# File lib/globalize/active_record/adapter.rb, line 51 def reset stash.clear end
save_translations!()
click to toggle source
# File lib/globalize/active_record/adapter.rb, line 36 def save_translations! stash.each do |locale, attrs| next if attrs.empty? translation = record.translations_by_locale[locale] || record.translations.build(locale: locale.to_s) attrs.each do |name, value| value = value.val if value.is_a?(Arel::Nodes::Casted) translation[name] = value end end reset end
Protected Instance Methods
column_for_attribute(name)
click to toggle source
# File lib/globalize/active_record/adapter.rb, line 63 def column_for_attribute(name) translation_class.columns_hash[name.to_s] end
fallbacks_for?(object)
click to toggle source
# File lib/globalize/active_record/adapter.rb, line 91 def fallbacks_for?(object) object.nil? || (fallbacks_for_empty_translations? && object.blank?) end
fetch_attribute(locale, name)
click to toggle source
# File lib/globalize/active_record/adapter.rb, line 71 def fetch_attribute(locale, name) translation = record.translation_for(locale, false) if translation translation.send(name) else record.class.translation_class.new.send(name) end end
set_metadata(object, metadata)
click to toggle source
# File lib/globalize/active_record/adapter.rb, line 80 def set_metadata(object, metadata) object.translation_metadata.merge!(metadata) if object.respond_to?(:translation_metadata) object end
translation_metadata_accessor(object)
click to toggle source
# File lib/globalize/active_record/adapter.rb, line 85 def translation_metadata_accessor(object) return if obj.respond_to?(:translation_metadata) class << object; attr_accessor :translation_metadata end object.translation_metadata ||= {} end
type_cast(name, value)
click to toggle source
# File lib/globalize/active_record/adapter.rb, line 57 def type_cast(name, value) return value.presence unless column = column_for_attribute(name) column.type_cast value end
unserializable_attribute?(name, column)
click to toggle source
# File lib/globalize/active_record/adapter.rb, line 67 def unserializable_attribute?(name, column) column.text? && translation_class.serialized_attributes[name.to_s] end