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)