Module: Globalize::ActiveRecord::AdapterDirty
- Included in:
- Adapter
- Defined in:
- lib/globalize/active_record/adapter_dirty.rb
Instance Attribute Summary collapse
Instance Method Summary collapse
- #_reset_attribute(name) ⇒ Object
- #clear_dirty ⇒ Object
- #reset ⇒ Object
- #store_old_value(name, locale) ⇒ Object
- #write(locale, name, value) ⇒ Object
Instance Attribute Details
#dirty ⇒ Object
27 28 29 |
# File 'lib/globalize/active_record/adapter_dirty.rb', line 27 def dirty @dirty ||= {} end |
Instance Method Details
#_reset_attribute(name) ⇒ Object
43 44 45 |
# File 'lib/globalize/active_record/adapter_dirty.rb', line 43 def _reset_attribute name record.send(:restore_attribute!, name) if record.respond_to? :restore_attribute!, true end |
#clear_dirty ⇒ Object
39 40 41 |
# File 'lib/globalize/active_record/adapter_dirty.rb', line 39 def clear_dirty self.dirty = {} end |
#reset ⇒ Object
47 48 49 50 |
# File 'lib/globalize/active_record/adapter_dirty.rb', line 47 def reset clear_dirty super end |
#store_old_value(name, locale) ⇒ Object
31 32 33 34 35 36 37 38 |
# 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) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# 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 |