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