Module: Mongoid::Hierarchy::InstanceMethods

Defined in:
lib/mongoid/hierarchy.rb

Overview

:nodoc:

Instance Method Summary collapse

Instance Method Details

#_childrenArray<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.

Examples:

Get all the document’s children.

person._children


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 .embedded?
          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

#_rootDocument

Return the root document in the object graph. If the current document is the root object in the graph it will return self.

Examples:

Get the root document in the hierarchy.

document._root


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.

Examples:

Check if the document is a subclass

Square.new.hereditary?


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.

Examples:

Set the parent document.

document.parentize(parent)


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.

Examples:

Remove the child.

document.remove_child(child)

Since:

  • 2.0.0.beta.1



85
86
87
88
# File 'lib/mongoid/hierarchy.rb', line 85

def remove_child(child)
  name = child..name
  child.embedded_one? ? remove_ivar(name) : send(name).delete_one(child)
end

#reset_persisted_childrenArray<Document>

After children are persisted we can call this to move all their changes and flag them as persisted in one call.

Examples:

Reset the children.

document.reset_persisted_children

Since:

  • 2.1.0



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