lib/mongo_mapper/plugins/keys.rb in mongo_mapper-0.7.0 vs lib/mongo_mapper/plugins/keys.rb in mongo_mapper-0.7.1
- old
+ new
@@ -168,15 +168,18 @@
@new
end
def attributes=(attrs)
return if attrs.blank?
-
+
attrs.each_pair do |name, value|
writer_method = "#{name}="
if respond_to?(writer_method)
+ if writer_method == '_root_document='
+ puts "_root_document= #{value.inspect}"
+ end
self.send(writer_method, value)
else
self[name.to_s] = value
end
end
@@ -215,11 +218,11 @@
end
def id
_id
end
-
+
def id=(value)
if self.class.using_object_id?
value = MongoMapper.normalize_object_id(value)
end
@@ -257,11 +260,11 @@
private
def assign_type_if_present
self._type = self.class.name if respond_to?(:_type=)
end
-
+
def ensure_key_exists(name)
self.class.key(name) unless respond_to?("#{name}=")
end
def read_key(name)
@@ -278,15 +281,20 @@
instance_variable_get("@#{name}_before_typecast")
end
def write_key(name, value)
key = keys[name]
+
+ if key.embeddable? && value.is_a?(key.type)
+ value._parent_document = self
+ end
+
instance_variable_set "@#{name}_before_typecast", value
instance_variable_set "@#{name}", key.set(value)
end
end
-
+
class Key
attr_accessor :name, :type, :options, :default_value
def initialize(*args)
options = args.extract_options!
@@ -307,10 +315,14 @@
[Integer, Float].include?(type)
end
def get(value)
if value.nil? && !default_value.nil?
- return default_value
+ if default_value.respond_to?(:call)
+ return default_value.call
+ else
+ return default_value
+ end
end
type.from_mongo(value)
end