lib/mongo_mapper/plugins/keys.rb in mongo_mapper-0.8.2 vs lib/mongo_mapper/plugins/keys.rb in mongo_mapper-0.8.3
- old
+ new
@@ -42,10 +42,15 @@
def object_id_key?(name)
object_id_keys.include?(name.to_sym)
end
+ # API Private
+ def can_default_id?
+ keys['_id'].can_default_id?
+ end
+
def to_mongo(instance)
return nil if instance.nil?
instance.to_mongo
end
@@ -266,12 +271,12 @@
end
end
def default_id_value(attrs)
unless attrs.nil?
- provided_keys = attrs.keys.map { |k| k.to_s }
- unless provided_keys.include?('_id') || provided_keys.include?('id')
+ 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
end
end
end
@@ -288,11 +293,9 @@
def read_key(key_name)
if key = keys[key_name]
value = key.get(instance_variable_get(:"@#{key_name}"))
set_parent_document(key, value)
instance_variable_set(:"@#{key_name}", value)
- else
- raise KeyNotFound, "Could not find key: #{key_name.inspect}"
end
end
def read_key_before_typecast(name)
instance_variable_get(:"@#{name}_before_typecast")