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 43
def _reset_attribute name
  record.send("#{name}=", record.changed_attributes[name])
  record.original_changed_attributes.except!(name)
end
clear_dirty() click to toggle source
# File lib/globalize/active_record/adapter_dirty.rb, line 39
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 48
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