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
This commit is contained in:
Arturo Pie
2012-03-26 22:51:53 -04:00
parent 714a2c810d
commit 6896cd4515
2 changed files with 19 additions and 12 deletions

View File

@@ -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

View File

@@ -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