aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/enum.rb
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2014-01-20 23:10:48 -0200
committerRafael Mendonça França <rafaelmfranca@gmail.com>2014-01-21 12:45:58 -0200
commita0520fceff9148ebfbb2e09745ba1416bceef2bf (patch)
tree3bebe28c2bdac6c2a44580134f1824a33a5330ad /activerecord/lib/active_record/enum.rb
parenta57a2bcf4a2c29519d553277e4439790ca443cc7 (diff)
downloadrails-a0520fceff9148ebfbb2e09745ba1416bceef2bf.tar.gz
rails-a0520fceff9148ebfbb2e09745ba1416bceef2bf.tar.bz2
rails-a0520fceff9148ebfbb2e09745ba1416bceef2bf.zip
Add more tests for the dirty feature for enums
Diffstat (limited to 'activerecord/lib/active_record/enum.rb')
-rw-r--r--activerecord/lib/active_record/enum.rb26
1 files changed, 19 insertions, 7 deletions
diff --git a/activerecord/lib/active_record/enum.rb b/activerecord/lib/active_record/enum.rb
index 06e87cf854..0990a4a871 100644
--- a/activerecord/lib/active_record/enum.rb
+++ b/activerecord/lib/active_record/enum.rb
@@ -123,14 +123,26 @@ module ActiveRecord
def _enum_methods_module
@_enum_methods_module ||= begin
mod = Module.new do
- def save_changed_attribute(attr_name, value)
- if self.class.enum_attribute?(attr_name)
- old = clone_attribute_value(:read_attribute, attr_name)
- changed_attributes[attr_name] = self.class.public_send(attr_name.pluralize).key old
- else
- super
+ private
+ def save_changed_attribute(attr_name, value)
+ if self.class.enum_attribute?(attr_name)
+ if attribute_changed?(attr_name)
+ old = changed_attributes[attr_name]
+
+ if self.class.public_send(attr_name.pluralize)[old] == value
+ changed_attributes.delete(attr_name)
+ end
+ else
+ old = clone_attribute_value(:read_attribute, attr_name)
+
+ if old != value
+ changed_attributes[attr_name] = self.class.public_send(attr_name.pluralize).key old
+ end
+ end
+ else
+ super
+ end
end
- end
end
include mod
mod