Module: MongoMapper::EmbeddedDocument::InstanceMethods
- Defined in:
- lib/mongo_mapper/embedded_document.rb
Instance Method Summary collapse
- #==(other) ⇒ Object
- #[](name) ⇒ Object
- #[]=(name, value) ⇒ Object
- #attributes ⇒ Object
- #attributes=(attrs) ⇒ Object
- #clone ⇒ Object
- #id ⇒ Object
- #id=(value) ⇒ Object
- #initialize(attrs = {}) ⇒ Object
- #inspect ⇒ Object
- #logger ⇒ Object
- #new? ⇒ Boolean
- #save ⇒ Object
- #save! ⇒ Object
- #to_mongo ⇒ Object
- #to_param ⇒ Object
- #update_attributes(attrs = {}) ⇒ Object
- #using_custom_id? ⇒ Boolean
Instance Method Details
#==(other) ⇒ Object
290 291 292 |
# File 'lib/mongo_mapper/embedded_document.rb', line 290 def ==(other) other.is_a?(self.class) && _id == other._id end |
#[](name) ⇒ Object
281 282 283 |
# File 'lib/mongo_mapper/embedded_document.rb', line 281 def [](name) read_attribute(name) end |
#[]=(name, value) ⇒ Object
285 286 287 288 |
# File 'lib/mongo_mapper/embedded_document.rb', line 285 def []=(name, value) ensure_key_exists(name) write_attribute(name, value) end |
#attributes ⇒ Object
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 |
# File 'lib/mongo_mapper/embedded_document.rb', line 238 def attributes attrs = HashWithIndifferentAccess.new .each do |key| attrs[key.name] = read_attribute(key.name).try(:attributes) end .each do |key| attrs[key.name] = read_attribute(key.name) end .each do |association| documents = instance_variable_get(association.ivar) next if documents.nil? attrs[association.name] = documents.collect { |doc| doc.attributes } end attrs end |
#attributes=(attrs) ⇒ Object
225 226 227 228 229 230 231 232 233 234 235 236 |
# File 'lib/mongo_mapper/embedded_document.rb', line 225 def attributes=(attrs) return if attrs.blank? attrs.each_pair do |name, value| writer_method = "#{name}=" if respond_to?(writer_method) self.send(writer_method, value) else self[name.to_s] = value end end end |
#clone ⇒ Object
275 276 277 278 279 |
# File 'lib/mongo_mapper/embedded_document.rb', line 275 def clone clone_attributes = self.attributes clone_attributes.delete("_id") self.class.new(clone_attributes) end |
#id ⇒ Object
294 295 296 |
# File 'lib/mongo_mapper/embedded_document.rb', line 294 def id read_attribute(:_id) end |
#id=(value) ⇒ Object
298 299 300 301 302 303 304 305 306 |
# File 'lib/mongo_mapper/embedded_document.rb', line 298 def id=(value) if self.class.using_object_id? value = MongoMapper.normalize_object_id(value) else @using_custom_id = true end write_attribute :_id, value end |
#initialize(attrs = {}) ⇒ Object
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 |
# File 'lib/mongo_mapper/embedded_document.rb', line 186 def initialize(attrs={}) unless attrs.nil? self.class.associations.each_pair do |name, association| if collection = attrs.delete(name) if association.many? && association.klass. root_document = attrs[:_root_document] || self collection.each do |doc| doc[:_root_document] = root_document end end send("#{association.name}=", collection) end end self.attributes = attrs if respond_to?(:_type=) && self['_type'].blank? self._type = self.class.name end end if self.class. if read_attribute(:_id).blank? write_attribute :_id, Mongo::ObjectID.new @new_document = true else @new_document = false end end end |
#inspect ⇒ Object
312 313 314 315 316 317 |
# File 'lib/mongo_mapper/embedded_document.rb', line 312 def inspect attributes_as_nice_string = key_names.collect do |name| "#{name}: #{read_attribute(name).inspect}" end.join(", ") "#<#{self.class} #{attributes_as_nice_string}>" end |
#logger ⇒ Object
182 183 184 |
# File 'lib/mongo_mapper/embedded_document.rb', line 182 def logger self.class.logger end |
#new? ⇒ Boolean
217 218 219 |
# File 'lib/mongo_mapper/embedded_document.rb', line 217 def new? !!@new_document end |
#save ⇒ Object
319 320 321 322 323 |
# File 'lib/mongo_mapper/embedded_document.rb', line 319 def save if _root_document _root_document.save end end |
#save! ⇒ Object
325 326 327 328 329 |
# File 'lib/mongo_mapper/embedded_document.rb', line 325 def save! if _root_document _root_document.save! end end |
#to_mongo ⇒ Object
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 |
# File 'lib/mongo_mapper/embedded_document.rb', line 258 def to_mongo attrs = HashWithIndifferentAccess.new _keys.each_pair do |name, key| value = key.set(read_attribute(key.name)) attrs[name] = value unless value.nil? end .each do |association| if documents = instance_variable_get(association.ivar) attrs[association.name] = documents.map { |document| document.to_mongo } end end attrs end |
#to_param ⇒ Object
221 222 223 |
# File 'lib/mongo_mapper/embedded_document.rb', line 221 def to_param id.to_s end |
#update_attributes(attrs = {}) ⇒ Object
331 332 333 334 |
# File 'lib/mongo_mapper/embedded_document.rb', line 331 def update_attributes(attrs={}) self.attributes = attrs save end |
#using_custom_id? ⇒ Boolean
308 309 310 |
# File 'lib/mongo_mapper/embedded_document.rb', line 308 def using_custom_id? !!@using_custom_id end |