lib/mongo_mapper/plugins/keys.rb in mongo_mapper-0.8.3 vs lib/mongo_mapper/plugins/keys.rb in mongo_mapper-0.8.4
- old
+ new
@@ -61,15 +61,14 @@
# load is overridden in identity map to ensure same objects are loaded
def load(attrs)
return nil if attrs.nil?
begin
- klass = attrs['_type'].present? ? attrs['_type'].constantize : self
- klass.new(attrs, true)
+ attrs['_type'].present? ? attrs['_type'].constantize : self
rescue NameError
- new(attrs, true)
- end
+ self
+ end.allocate.initialize_from_database(attrs)
end
private
def key_accessors_module_defined?
if method(:const_defined?).arity == 1 # Ruby 1.9 compat check
@@ -158,20 +157,20 @@
end
end
end
module InstanceMethods
- def initialize(attrs={}, from_database=false)
+ def initialize(attrs={})
default_id_value(attrs)
+ @_new = true
+ assign(attrs)
+ end
- if from_database
- @_new = false
- load_from_database(attrs)
- else
- @_new = true
- assign(attrs)
- end
+ def initialize_from_database(attrs={})
+ @_new = false
+ load_from_database(attrs)
+ self
end
def persisted?
!new? && !destroyed?
end
@@ -273,10 +272,10 @@
def default_id_value(attrs)
unless attrs.nil?
id_provided = attrs.keys.map { |k| k.to_s }.detect { |k| k == 'id' || k == '_id' }
if !id_provided && self.class.can_default_id?
- write_key :_id, BSON::ObjectID.new
+ write_key :_id, BSON::ObjectId.new
end
end
end
def ensure_key_exists(name)