Módulo: Mongoid::Traversable
Overview
Módulo mixin incluido en Mongoid::Document para proporcionar comportamiento alrededor de la navegación por el grafo de documentos.
Definido bajo Namespace
Modules: ClassMethods, DiscriminatorAssignment, DiscriminatorRetrieval
Resumen del método de clase colapsar
Resumen del método de instancia colapsar
-
#_children(reset: false) ⇒ arreglo<Document>
privado
Obtén todos los hijos
Documentsde esteDocument. -
#_descendants(reset: false) ⇒arreglo<Document>
privado
Obtener todos los descendientes
Documentsde esteDocumentrecursivamente. -
#_parent ⇒ Mongoid::Document | nil
privado
Recupera el documento principal de este documento.
-
#_parent=(documento) ⇒ Objeto
privado
Establece el documento padre de este documento.
-
#_reset_memoized_descendants! ⇒ nil
privado
Restablece los descendientes memorizados en el objeto.
-
#_root ⇒ Document
Devuelve el documento raíz en el grafo de objetos.
-
#_root? ⇒ true | false
¿Este documento es el documento raíz de la jerarquía?.
-
#collect_children ⇒ arreglo<Document>
privado
Recopile todos los subdocumentos de este documento.
-
#collect_descendants ⇒ arreglo<Document>
privado
Recoge todos los descendientes de este documento.
-
#flag_descendants_persisted ⇒ arreglo<Document>
Marca todos los descendientes como persistidos.
-
#hereditaria? ⇒ true | false
Determina si el documento es una subclase de otro documento.
-
#parentize(document) ⇒ documento
Establece una asociación padre/madre-hijo/a.
-
#remove_child(child) ⇒ Object
Remueve un documento hijo de este padre.
-
#reset_persisted_descendants ⇒ arreglo<Document>
Una vez que los descendientes se hayan persistido, podemos llamar a esto para mover todos sus cambios y marcarlos como persistidos en una sola llamada.
Detalles del método de clase
.__redefine(propietario, nombre, valor) ⇒ objeto
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# Archivo 'lib/mongoid/traversable.rb', línea 18 def __redefine(propietario, Nombre, Valor) si propietario.singleton_class? propietario.redefine_method(Nombre) { Valor } propietario.enviar(:public, Nombre) end propietario.redefine_singleton_method(Nombre) { Valor } propietario.singleton_class.enviar(:public, Nombre) propietario.redefine_singleton_method("#{name}=") hacer |nuevo valor| si propietario.¿igual?(sí mismo) Valor = nuevo valor else ::Mongoid::Traversable.redefinir(sí mismo, Nombre, nuevo valor) end end propietario.singleton_class.enviar(:public, "#{name}=") end |
Detalles del método de instancia
#_children(reset: false) ⇒ arreglo<Documento>
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Obtén todos los elementos secundarios Documents de este Document
237 238 239 240 241 242 243 244 245 246 247 248 |
# Archivo 'lib/mongoid/traversable.rb', línea 237 def _children(restablecer: false) # Consulte la discusión anterior sobre el método `_parent`, en cuanto a por qué la variable # aquí debe haber dos guiones bajos. # # rubocop:disable Naming/MemoizedInstanceVariableName si restablecer @__children = nulo else @__children ||= recoger_niños end # rubocop:enable Naming/MemoizedInstanceVariableName end |
#_descendants(reset: false) ⇒ arreglo<documento>
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Get todos los descendientes de Documents de este Document de forma recursiva. Esto se utiliza al llamar operaciones de persistencia de actualización desde el root document, donde se deben determinar los cambios en todo el árbol. Tenga en cuenta que siempre se preferirá la persistencia desde los documentos incrustados, ya que son llamadas optimizadas... Esta operación puede resultar costosa en dominios con jerarquías grandes.
260 261 262 263 264 265 266 267 268 269 270 271 |
# Archivo 'lib/mongoid/traversable.rb', línea 260 def _descendants(restablecer: false) # Consulte la discusión anterior sobre el método `_parent`, en cuanto a por qué la variable # aquí debe haber dos guiones bajos. # # rubocop:disable Naming/MemoizedInstanceVariableName si restablecer @__descendants = nulo else @__descendants ||= collect_descendants end # rubocop:enable Naming/MemoizedInstanceVariableName end |
#_parent ⇒ Mongoid::Document | nil
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Recupera el documento principal de este documento.
109 110 111 |
# Archivo 'lib/mongoid/traversable.rb', línea 109 def _parent @__parent || nulo end |
#_parent=(documento) ⇒ Objeto
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Establece el documento padre de este documento.
121 122 123 |
# Archivo 'lib/mongoid/traversable.rb', línea 121 def _parent=(Documento) @__parent = Documento end |
#_reset_memoized_descendants! ⇒ nil
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Restaura los descendientes memorizados en el objeto. Se llama internamente cuando un arreglo incrustado cambia de tamaño.
387 388 389 390 391 |
# Archivo 'lib/mongoid/traversable.rb', línea 387 def _reset_memoized_descendants! _parent&._reset_memoized_descendants! _children restablecer: true _descendants restablecer: true end |
#_root ⇒ Document
Devuelve el documento raíz en el grafo de objetos. Si el documento actual es el objeto raíz en el grafo, devolverá self.
400 401 402 403 404 |
# Archivo 'lib/mongoid/traversable.rb', línea 400 def _root Objeto = sí mismo Objeto = Objeto._parent mientras Objeto._parent Objeto end |
#_root? ⇒ true | false
¿Es este documento el documento raíz de la jerarquía?
412 413 414 |
# Archivo 'lib/mongoid/traversable.rb', línea 412 def _root? _parent ? false : true end |
#collect_children ⇒ arreglo<Documento>
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Recopile todos los subdocumentos de este documento.
278 279 280 281 282 283 284 285 286 287 |
# Archivo 'lib/mongoid/traversable.rb', línea 278 def recoger_niños [].tocar hacer |hijo| .each_pair hacer |Nombre, _association| without_autobuild hacer niño = enviar(Nombre) hijo.concat(Arreglo.ajustar(niño)) si niño end end end end |
#collect_descendants ⇒ Array<Documento>
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Recoge todos los descendientes de este documento.
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 |
# Archivo 'lib/mongoid/traversable.rb', línea 294 def collect_descendants hijo = [] = _children = {} hasta .¿vacío? = = [] .cada hacer |niño| Next si [niño] # No marques expandido si _id es nulo, ya que los documentos se comparan por # sus _ids, los documentos incrustados múltiples con IDs nulos compararán # de manera equitativa, y algunos documentos no se expandirán. [niño] = true si niño._id hijo << niño += niño._children end end hijo end |
#flag_descendants_persisted ⇒ Array<Documento>
Marca todos los descendientes como persistidos.
320 321 322 323 324 |
# Archivo 'lib/mongoid/traversable.rb', línea 320 def Las descendencias se han guardado exitosamente como tokens de descendientes. _descendants.cada hacer |niño| niño.nuevo_registro = false end end |
#¿hereditaria? ⇒ true | false
Determina si el documento es una subclase de otro documento.
332 333 334 |
# Archivo 'lib/mongoid/traversable.rb', línea 332 def ¿hereditaria? sí mismo.clase.¿hereditaria? end |
#parentize(documento) ⇒ Documento
Establece una asociación hijo/padre. Esto se utiliza para los objetos recién creados para que se puedan añadir correctamente al grafo.
345 346 347 |
# Archivo 'lib/mongoid/traversable.rb', línea 345 def Parentalizar(Documento) sí mismo._parent = Documento end |
#remove_child(child) ⇒ objeto
Remover un documento secundario de este principal. Si una incrusta entonces, establecer en nil; de lo contrario, remover de las numerosas incrustaciones.
Esto se llama desde el comando de persistencia RemoveEmbedded.
358 359 360 361 362 363 364 365 366 367 |
# Archivo 'lib/mongoid/traversable.rb', línea 358 def remove_child(niño) Nombre = niño.association_name si niño. atributos.borrar(niño._association.store_as) remove_ivar(Nombre) else relación = enviar(Nombre) relación.remover(niño) end end |
#reset_persisted_descendants ⇒ Array<Documento>
Una vez que los descendientes se hayan persistido, podemos llamar a esto para mover todos sus cambios y marcarlos como persistidos en una sola llamada.
373 374 375 376 377 378 379 |
# Archivo 'lib/mongoid/traversable.rb', línea 373 def reset_persisted_descendants _descendants.cada hacer |niño| niño.move_changes niño.nuevo_registro = false end _reset_memoized_descendants! end |