mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
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
This commit is contained in:
committed by
José Valim
parent
dfac9b1404
commit
83ecd03e7d
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user