diff options
author | Stevie Graham <sjtgraham@mac.com> | 2010-09-13 02:13:48 +0800 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2010-09-21 01:44:29 +0800 |
commit | 83ecd03e7d3472c16decbf1b9939da53347b36a3 (patch) | |
tree | 773e9867dfe253332dbf52f6e8151c8a1a99c642 | |
parent | dfac9b1404d78d1abb793431bb034a2cc78ce270 (diff) | |
download | rails-83ecd03e7d3472c16decbf1b9939da53347b36a3.tar.gz rails-83ecd03e7d3472c16decbf1b9939da53347b36a3.tar.bz2 rails-83ecd03e7d3472c16decbf1b9939da53347b36a3.zip |
use instance_eval, reduce method calls.
execution time in seconds for `rake test_sqlite3`:
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0]
- before: 52.771426, 52.159505, 52.937056
- after: 51.452584, 51.897017, 51.584431
rubinius 1.0.1 (1.8.7 release 2010-06-03 JI) [x86_64-apple-darwin10.4.0]
- before: 284.334076
- after: 285.753028
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
- before: 75.811548, 75.533153, 75.353122
- after: 75.244243, 75.19226, 75.256925
-rw-r--r-- | activerecord/lib/active_record/base.rb | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 5da4eb169b..e86d4984a6 100644 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -884,21 +884,13 @@ module ActiveRecord #:nodoc: # single-table inheritance model that makes it possible to create # objects of different types from the same table. def instantiate(record) - object = find_sti_class(record[inheritance_column]).allocate - - object.instance_variable_set(:@attributes, record) - object.instance_variable_set(:@attributes_cache, {}) - object.instance_variable_set(:@new_record, false) - object.instance_variable_set(:@readonly, false) - object.instance_variable_set(:@destroyed, false) - object.instance_variable_set(:@marked_for_destruction, false) - object.instance_variable_set(:@previously_changed, {}) - object.instance_variable_set(:@changed_attributes, {}) - - object.send(:_run_find_callbacks) - object.send(:_run_initialize_callbacks) - - object + find_sti_class(record[inheritance_column]).allocate.instance_eval do + @attributes, @attributes_cache, @previously_changed, @changed_attributes = record, {}, {}, {} + @new_record = @readonly = @destroyed = @marked_for_destruction = false + _run_find_callbacks + _run_initialize_callbacks + self + end end def find_sti_class(type_name) |