aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/attribute.rb
diff options
context:
space:
mode:
authorSean Griffin <sean@seantheprogrammer.com>2015-09-24 11:50:11 -0600
committerSean Griffin <sean@seantheprogrammer.com>2015-09-24 14:06:59 -0600
commit8e633e505880755e7e366ccec2210bbe2b5436e7 (patch)
tree3df446051d47c42cd6081a1449a27d57f9179f88 /activerecord/lib/active_record/attribute.rb
parentadfb823af52d368fa4d88731a9809a314ad884ad (diff)
downloadrails-8e633e505880755e7e366ccec2210bbe2b5436e7.tar.gz
rails-8e633e505880755e7e366ccec2210bbe2b5436e7.tar.bz2
rails-8e633e505880755e7e366ccec2210bbe2b5436e7.zip
Clean up the implementation of AR::Dirty
This moves a bit more of the logic required for dirty checking into the attribute objects. I had hoped to remove the `with_value_from_database` stuff, but unfortunately just calling `dup` on the attribute objects isn't enough, since the values might contain deeply nested data structures. I think this can be cleaned up further. This makes most dirty checking become lazy, and reduces the number of object allocations and amount of CPU time when assigning a value. This opens the door (but doesn't quite finish) to improving the performance of writes to a place comparable to 4.1
Diffstat (limited to 'activerecord/lib/active_record/attribute.rb')
-rw-r--r--activerecord/lib/active_record/attribute.rb1
1 files changed, 1 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/attribute.rb b/activerecord/lib/active_record/attribute.rb
index 73dd3fa041..21fe032a9c 100644
--- a/activerecord/lib/active_record/attribute.rb
+++ b/activerecord/lib/active_record/attribute.rb
@@ -55,6 +55,7 @@ module ActiveRecord
end
def with_value_from_user(value)
+ type.assert_valid_value(value)
self.class.from_user(name, value, type)
end