Module: DeltaChanges::Extension::InstanceMethodsLegacy

Defined in:
lib/delta_changes.rb

Overview

Rails < 5.2

Instance Method Summary collapse

Instance Method Details

#write_attribute(attr, value) ⇒ Object

Wrap write_attribute to remember original attribute value.


51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/delta_changes.rb', line 51

def write_attribute(attr, value)
  attr = attr.to_s

  unless self.class.delta_changes_options[:columns].include?(attr)
    return super(attr, value)
  end

  # The attribute already has an unsaved change.
  if delta_changed_attributes.include?(attr)
    old = delta_changed_attributes[attr]
    super(attr, value)
    delta_changed_attributes.delete(attr) unless delta_changes_field_changed?(attr, old, value)
  else
    old = respond_to?(:clone_attribute_value) ? clone_attribute_value(:read_attribute, attr) : read_attribute(attr).dup
    super(attr, value)
    delta_changed_attributes[attr] = old if delta_changes_field_changed?(attr, old, value)
  end
end