Module: Mongoid::Hierarchy::InstanceMethods
- Defined in:
- lib/mongoid/hierarchy.rb
Overview
:nodoc:
Instance Method Summary collapse
-
#_children ⇒ Array<Document>
Get all child
Documents
to thisDocument
, going n levels deep if necessary. -
#_root ⇒ Document
Return the root document in the object graph.
-
#hereditary? ⇒ true, false
Determines if the document is a subclass of another document.
-
#parentize(document) ⇒ Document
Sets up a child/parent association.
-
#remove_child(child) ⇒ Object
Remove a child document from this parent.
-
#reset_persisted_children ⇒ Array<Document>
After children are persisted we can call this to move all their changes and flag them as persisted in one call.
Instance Method Details
#_children ⇒ Array<Document>
Get all child Documents
to this Document
, going n levels deep if necessary. This is used when calling update persistence operations from the root document, where changes in the entire tree need to be determined. Note that persistence from the embedded documents will always be preferred, since they are optimized calls… This operation can get expensive in domains with large hierarchies.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/mongoid/hierarchy.rb', line 36 def _children @_children ||= [].tap do |children| relations.each_pair do |name, | if . child = send(name) child.to_a.each do |doc| children.push(doc) children.concat(doc._children) unless .versioned? end if child end end end end |
#_root ⇒ Document
Return the root document in the object graph. If the current document is the root object in the graph it will return self.
113 114 115 116 117 |
# File 'lib/mongoid/hierarchy.rb', line 113 def _root object = self while (object._parent) do object = object._parent; end object || self end |
#hereditary? ⇒ true, false
Determines if the document is a subclass of another document.
57 58 59 |
# File 'lib/mongoid/hierarchy.rb', line 57 def hereditary? self.class.hereditary? end |
#parentize(document) ⇒ Document
Sets up a child/parent association. This is used for newly created objects so they can be properly added to the graph.
70 71 72 |
# File 'lib/mongoid/hierarchy.rb', line 70 def parentize(document) self._parent = document end |
#remove_child(child) ⇒ Object
Remove a child document from this parent. If an embeds one then set to nil, otherwise remove from the embeds many.
This is called from the RemoveEmbedded
persistence command.
85 86 87 88 |
# File 'lib/mongoid/hierarchy.rb', line 85 def remove_child(child) name = child..name child. ? remove_ivar(name) : send(name).delete_one(child) end |
#reset_persisted_children ⇒ Array<Document>
After children are persisted we can call this to move all their changes and flag them as persisted in one call.
99 100 101 102 103 104 |
# File 'lib/mongoid/hierarchy.rb', line 99 def reset_persisted_children _children.each do |child| child.move_changes child.new_record = false end end |