diff options
author | Arturo Pie <arturotd08@yahoo.ca> | 2012-03-26 22:51:53 -0400 |
---|---|---|
committer | Arturo Pie <arturotd08@yahoo.ca> | 2012-03-29 22:39:01 -0400 |
commit | 6896cd451545679a6413939fc4eae68f3cc3ba8b (patch) | |
tree | 88315d2bfc9f31b7f6c66af5d48b649a415214bc | |
parent | 714a2c810deb9d219442f7c981e61eb6d5c45d33 (diff) | |
download | rails-6896cd451545679a6413939fc4eae68f3cc3ba8b.tar.gz rails-6896cd451545679a6413939fc4eae68f3cc3ba8b.tar.bz2 rails-6896cd451545679a6413939fc4eae68f3cc3ba8b.zip |
refactor instantiate method in base, so we remove nesting if's which make the code harder to read. Minor changes to contain_all_columns in IdentityMap.
Conflicts:
activerecord/lib/active_record/base.rb
-rw-r--r-- | activerecord/lib/active_record/identity_map.rb | 6 | ||||
-rw-r--r-- | activerecord/lib/active_record/inheritance.rb | 25 |
2 files changed, 19 insertions, 12 deletions
diff --git a/activerecord/lib/active_record/identity_map.rb b/activerecord/lib/active_record/identity_map.rb index f3891b406e..b1da547142 100644 --- a/activerecord/lib/active_record/identity_map.rb +++ b/activerecord/lib/active_record/identity_map.rb @@ -90,7 +90,7 @@ module ActiveRecord end def add(record) - repository[record.class.symbolized_sti_name][record.id] = record if contain_all_columns(record) + repository[record.class.symbolized_sti_name][record.id] = record if contain_all_columns?(record) end def remove(record) @@ -107,8 +107,8 @@ module ActiveRecord private - def contain_all_columns(record) - (record.class.column_names - record.attribute_names) == [] + def contain_all_columns?(record) + (record.class.column_names - record.attribute_names).empty? end end diff --git a/activerecord/lib/active_record/inheritance.rb b/activerecord/lib/active_record/inheritance.rb index de9461982a..3e12a67c2a 100644 --- a/activerecord/lib/active_record/inheritance.rb +++ b/activerecord/lib/active_record/inheritance.rb @@ -63,15 +63,7 @@ module ActiveRecord record_id = sti_class.primary_key && record[sti_class.primary_key] if ActiveRecord::IdentityMap.enabled? && record_id - if (column = sti_class.columns_hash[sti_class.primary_key]) && column.number? - record_id = record_id.to_i - end - if instance = IdentityMap.get(sti_class, record_id) - instance.reinit_with('attributes' => record) - else - instance = sti_class.allocate.init_with('attributes' => record) - IdentityMap.add(instance) - end + instance = use_identity_map(sti_class, record_id, record) else instance = sti_class.allocate.init_with('attributes' => record) end @@ -122,6 +114,21 @@ module ActiveRecord private + def use_identity_map(sti_class, record_id, record) + if (column = sti_class.columns_hash[sti_class.primary_key]) && column.number? + record_id = record_id.to_i + end + + if instance = IdentityMap.get(sti_class, record_id) + instance.reinit_with('attributes' => record) + else + instance = sti_class.allocate.init_with('attributes' => record) + IdentityMap.add(instance) + end + + instance + end + def find_sti_class(type_name) if type_name.blank? || !columns_hash.include?(inheritance_column) self |