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: Métodos de clase, asignación de discriminador, recuperación de discriminador
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 gráfico de objetos.
-
#_root? ⇒ verdadero | falso
¿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 ⇒ Array<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 forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# Archivo 'lib/mongoid/traversable.rb', línea 17 def __redefine(propietario, Nombre, Valor) si propietario.singleton_class? propietario.método de redefinición(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 forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Obtén todos los elementos secundarios Documents de este Document
238 239 240 241 242 243 244 245 246 247 248 249 |
# Archivo 'lib/mongoid/traversable.rb', línea 238 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:habilitar nombres/nombre de variable de instancia memorizado end |
#_descendants(reset: false) ⇒ arreglo<documento>
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Obtener todos los descendientes Documents de este Document de forma recursiva. Esto se utiliza al llamar operaciones de persistencia de actualización desde el documento raíz, donde es necesario determinar los cambios en todo el árbol. Ten en cuenta que siempre se preferirá la persistencia de los documentos incrustados, ya que son llamadas optimizadas... Esta operación puede resultar costosa en dominios con jerarquías grandes.
261 262 263 264 265 266 267 268 269 270 271 272 |
# Archivo 'lib/mongoid/traversable.rb', línea 261 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:habilitar nombres/nombre de variable de instancia memorizado end |
#_parent ⇒ Mongoid::Document | nil
Este método forma parte de una API privada. Debe evitarlo 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 forma parte de una API privada. Debe evitarlo 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 forma parte de una API privada. Debe evitarlo 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.
388 389 390 391 392 |
# Archivo 'lib/mongoid/traversable.rb', línea 388 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.
401 402 403 404 405 |
# Archivo 'lib/mongoid/traversable.rb', línea 401 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?
413 414 415 |
# Archivo 'lib/mongoid/traversable.rb', línea 413 def _root? _parent ? false : true end |
#collect_children ⇒ arreglo<Documento>
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Recopile todos los subdocumentos de este documento.
279 280 281 282 283 284 285 286 287 288 |
# Archivo 'lib/mongoid/traversable.rb', línea 279 def recoger_niños [].tocar hacer |hijo| .each_pair hacer |Nombre, _association| without_autobuild hacer niño = enviar(Nombre) hijo.concat(Arreglo.envolver(niño)) si niño end end end end |
#collect_descendants ⇒ Array<Documento>
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Recoge todos los descendientes de este documento.
295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 |
# Archivo 'lib/mongoid/traversable.rb', línea 295 def collect_descendants hijo = [] = _children = {} hasta .¿vacío? = = [] .cada hacer |niño| siguiente si [niño] # No marque como 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 ⇒ Matriz
Marca todos los descendientes como persistidos.
321 322 323 324 325 |
# Archivo 'lib/mongoid/traversable.rb', línea 321 def los descendientes de la bandera persistieron _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.
333 334 335 |
# Archivo 'lib/mongoid/traversable.rb', línea 333 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.
346 347 348 |
# Archivo 'lib/mongoid/traversable.rb', línea 346 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.
359 360 361 362 363 364 365 366 367 368 |
# Archivo 'lib/mongoid/traversable.rb', línea 359 def eliminar_hijo(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.
374 375 376 377 378 379 380 |
# Archivo 'lib/mongoid/traversable.rb', línea 374 def reset_persisted_descendants _descendants.cada hacer |niño| niño.move_changes niño.nuevo_registro = false end _reset_memoized_descendants! end |