aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib/active_model
diff options
context:
space:
mode:
authorRafael Mendonça França <rafael.franca@plataformatec.com.br>2014-08-17 22:38:22 -0300
committerRafael Mendonça França <rafael.franca@plataformatec.com.br>2014-08-17 22:38:22 -0300
commitc78da4d5c472f7254ed609ef753d7b1719732802 (patch)
treef04630ac62d08a49744b90bdf20bf75dcb883838 /activemodel/lib/active_model
parent4e4913462104df89f1bee08faeb4ba5aab8c9228 (diff)
parent7ee055076ec2c5b2e9c110f821c10fe06bf38a1c (diff)
downloadrails-c78da4d5c472f7254ed609ef753d7b1719732802.tar.gz
rails-c78da4d5c472f7254ed609ef753d7b1719732802.tar.bz2
rails-c78da4d5c472f7254ed609ef753d7b1719732802.zip
Merge branch 'master' into loofah
Conflicts: actionpack/CHANGELOG.md
Diffstat (limited to 'activemodel/lib/active_model')
-rw-r--r--activemodel/lib/active_model/dirty.rb18
1 files changed, 16 insertions, 2 deletions
diff --git a/activemodel/lib/active_model/dirty.rb b/activemodel/lib/active_model/dirty.rb
index d11243c4c0..ca04f48c1c 100644
--- a/activemodel/lib/active_model/dirty.rb
+++ b/activemodel/lib/active_model/dirty.rb
@@ -219,7 +219,7 @@ module ActiveModel
rescue TypeError, NoMethodError
end
- changed_attributes[attr] = value
+ set_attribute_was(attr, value)
end
# Handle <tt>reset_*!</tt> for +method_missing+.
@@ -233,8 +233,22 @@ module ActiveModel
def restore_attribute!(attr)
if attribute_changed?(attr)
__send__("#{attr}=", changed_attributes[attr])
- changed_attributes.delete(attr)
+ clear_attribute_changes([attr])
end
end
+
+ # This is necessary because `changed_attributes` might be overridden in
+ # other implemntations (e.g. in `ActiveRecord`)
+ alias_method :attributes_changed_by_setter, :changed_attributes # :nodoc:
+
+ # Force an attribute to have a particular "before" value
+ def set_attribute_was(attr, old_value)
+ attributes_changed_by_setter[attr] = old_value
+ end
+
+ # Remove changes information for the provided attributes.
+ def clear_attribute_changes(attributes)
+ attributes_changed_by_setter.except!(*attributes)
+ end
end
end