module AWS::Record::DirtyTracking
def attribute_change attribute_name
def attribute_change attribute_name self.class.attribute_for(attribute_name) do |attribute| if orig_values.has_key?(attribute.name) [orig_values[attribute.name], __send__(attribute.name)] else nil end end end
def attribute_changed? attribute_name
def attribute_changed? attribute_name orig_values.keys.include?(attribute_name) end
def attribute_was attribute_name
def attribute_was attribute_name self.class.attribute_for(attribute_name) do |attribute| name = attribute.name orig_values.has_key?(name) ? orig_values[name] : __send__(name) end end
def attribute_will_change! attribute_name
def attribute_will_change! attribute_name self.class.attribute_for(attribute_name) do |attribute| name = attribute.name unless orig_values.has_key?(name) was = __send__(name) begin # booleans, nil, etc all #respond_to?(:clone), but they raise # a TypeError when you attempt to dup them. orig_values[name] = was.clone rescue TypeError orig_values[name] = was end end end nil end
def changed
-
(Array)
- Returns an array of attribute names that have
def changed orig_values.keys end
def changed?
-
(Boolean)
- Returns true if any of the attributes have
def changed? !orig_values.empty? end
def changes
-
(Hash)
- Returns a hash of attribute changes.
def changes changed.inject({}) do |changes, attr_name| changes[attr_name] = attribute_change(attr_name) changes end end
def clear_change! attribute_name
def clear_change! attribute_name orig_values.delete(attribute_name) end
def clear_changes!
def clear_changes! orig_values.clear end
def if_tracking_changes &block
def if_tracking_changes &block yield unless @_ignore_changes end
def ignore_changes &block
def ignore_changes &block begin @_ignore_changes = true yield ensure @_ignore_changes = false end end
def orig_values
def orig_values @_orig_values ||= {} end
def reset_attribute! attribute_name
def reset_attribute! attribute_name __send__("#{attribute_name}=", attribute_was(attribute_name)) nil end