module Globalize::ActiveRecord::AdapterDirty
Attributes
dirty[W]
Public Instance Methods
_reset_attribute(name)
click to toggle source
# File lib/globalize/active_record/adapter_dirty.rb, line 45 def _reset_attribute name record.send(:clear_attribute_changes, [name]) end
changed()
click to toggle source
# File lib/globalize/active_record/adapter_dirty.rb, line 66 def changed stash.keys.flat_map { |locale| changes(locale).keys }.uniq end
changed_attributes(locale)
click to toggle source
# File lib/globalize/active_record/adapter_dirty.rb, line 62 def changed_attributes(locale) Hash[changes(locale).map { |name, change| [name, change.first] }] end
changes(locale)
click to toggle source
# File lib/globalize/active_record/adapter_dirty.rb, line 70 def changes(locale) stash[locale].keys.inject({}) do |hash, name| next hash unless dirty[name].is_a?(Hash) next hash unless dirty[name].key?(locale) new_value = stash[locale][name] old_value = dirty[name][locale] unless new_value == old_value hash[name] = [old_value, new_value] end hash end end
clear_dirty()
click to toggle source
# File lib/globalize/active_record/adapter_dirty.rb, line 40 def clear_dirty self.dirty = {} end
dirty()
click to toggle source
# File lib/globalize/active_record/adapter_dirty.rb, line 27 def dirty @dirty ||= {} end
reset()
click to toggle source
Calls superclass method
# File lib/globalize/active_record/adapter_dirty.rb, line 57 def reset clear_dirty super end
store_old_value(name, locale)
click to toggle source
# File lib/globalize/active_record/adapter_dirty.rb, line 31 def store_old_value name, locale dirty[name] ||= {} unless dirty[name].key? locale old = fetch(locale, name) old = old.dup if old.duplicable? dirty[name][locale] = old end end
write(locale, name, value)
click to toggle source
Calls superclass method
# File lib/globalize/active_record/adapter_dirty.rb, line 4 def write locale, name, value # Dirty tracking, paraphrased from # ActiveRecord::AttributeMethods::Dirty#write_attribute. name = name.to_s store_old_value name, locale old_values = dirty[name] old_value = old_values[locale] is_changed = record.send :attribute_changed?, name if is_changed && value == old_value # If there's already a change, delete it if this undoes the change. old_values.delete locale if old_values.empty? _reset_attribute name end elsif !is_changed # If there's not a change yet, record it. record.send(:attribute_will_change!, name) if old_value != value end super locale, name, value end