Módulo: Mongoid::Traversable
- Ampliado por:
- ActiveSupport::Preocupación
- Incluido en:
- Componible
- Definido en:
- lib/mongoid/traversable.rb
Overview
Módulo mixin incluido en Mongoid::Document para proporcionar comportamiento alrededor de la navegación por el grafo de documentos.
Definido en el espacio de nombres
Modules: Métodos de clase, asignación de discriminador, recuperación de discriminador
Colapso delresumen del método de clase
Colapso del resumen del método de instancia
-
#_children(reset: false) ⇒ Array<Document>
privada
Obtener todos los niños
Documentsen esteDocument. -
#_descendientes(reinicio: falso) ⇒ Array<Document>
privada
Obtener todos los descendientes
Documentsde esteDocumentrecursivamente. -
#_parent ⇒ Mongoid::Document | nil
privada
Recupera el documento padre de este documento.
-
#_parent=(documento) ⇒ Objeto
privada
Establece el documento padre de este documento.
-
#¡_reiniciar_descendientes_memoizados! ⇒ nulo
privada
Restablece los descendientes memorizados en el objeto.
-
#_root ⇒ Document
Devuelve el documento raíz en el gráfico de objetos.
-
#_root? ⇒ verdadero | falso
¿Es este documento el documento raíz de la jerarquía?
-
#collect_children ⇒ Array<Document>
privada
Recopila todos los hijos de este documento.
-
#collect_descendants ⇒ Array<Document>
privada
Recopila todos los descendientes de este documento.
-
#flag_descendants_persisted ⇒ Matriz<Document>
Marca a todos los descendientes como persistentes.
-
#hereditario? ⇒ verdadero | falso
Determina si el documento es una subclase de otro documento.
-
#parentize(documento) ⇒ Documento
Establece una asociación padre/hijo.
-
#remove_child(hijo) ⇒ Objeto
Eliminar un documento secundario de este documento principal.
-
#reset_persisted_descendants ⇒ Matriz<Document>
Una vez que se persisten los descendientes, podemos llamar a esto para mover todos sus cambios y marcarlos como persistentes 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.¿clase singleton? propietario.método de redefinición(Nombre) { valor } propietario.Enviar(:public, Nombre) end propietario.redefinir_el_método_singleton(Nombre) { valor } propietario.clase singleton.Enviar(:public, Nombre) propietario.redefinir_el_método_singleton("#{nombre}=") hacer |nuevo_valor| Si propietario.¿igual?(yo) valor = nuevo_valor else ::Mongoid::Traversable.redefinir(yo, Nombre, nuevo_valor) end end propietario.clase singleton.Enviar(:public, "#{nombre}=") end |
Detalles del método de instancia
#_children(reset: false) ⇒ Array
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 niños Documents en este Document
238 239 240 241 242 243 244 245 246 247 248 249 |
# Archivo 'lib/mongoid/traversable.rb', línea 238 def _niños(reiniciar: false) # Consulte la discusión anterior sobre el método `_parent`, en cuanto a por qué la variable # Aquí debe tener dos guiones bajos. # # rubocop:deshabilitar Nombre/Nombre de variable de instancia memorizado Si RESET @__children = nulo else @__children ||= recoger_niños end # rubocop:habilitar nombres/nombre de variable de instancia memorizado end |
#_descendientes(reinicio: falso) ⇒ Matriz
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 recursivamente. Esto se utiliza al llamar a operaciones de persistencia de actualización desde el documento raíz, 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.
261 262 263 264 265 266 267 268 269 270 271 272 |
# Archivo 'lib/mongoid/traversable.rb', línea 261 def _descendants(reiniciar: false) # Consulte la discusión anterior sobre el método `_parent`, en cuanto a por qué la variable # Aquí debe tener dos guiones bajos. # # rubocop:deshabilitar Nombre/Nombre de variable de instancia memorizado Si RESET @__descendants = nulo else @__descendants ||= recopilar_descendientes 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 padre de este documento.
109 110 111 |
# Archivo 'lib/mongoid/traversable.rb', línea 109 def _padre @__padre || 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 _padre=(Documento) @__padre = Documento end |
#¡_reiniciar_descendientes_memoizados! ⇒ nulo
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Restablece los descendientes memorizados en el objeto. Se llama internamente cuando una matriz incrustada cambia de tamaño.
388 389 390 391 392 |
# Archivo 'lib/mongoid/traversable.rb', línea 388 def _reset_memoized_descendants! _padre&._reset_memoized_descendants! _niños reiniciar: true _descendants reiniciar: true end |
#_root ⇒ Document
Devuelve el documento raíz en el gráfico de objetos. Si el documento actual es el objeto raíz en el gráfico, devolverá "self".
401 402 403 404 405 |
# Archivo 'lib/mongoid/traversable.rb', línea 401 def _root Objeto = yo Objeto = Objeto._padre mientras Objeto._padre Objeto end |
#_root? ⇒ verdadero | falso
¿Es este documento el documento raíz de la jerarquía?
413 414 415 |
# Archivo 'lib/mongoid/traversable.rb', línea 413 def _root? _padre ? false : true end |
#collect_children ⇒ Array
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Recopila todos los hijos 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 [].grifo hacer |niños| .each_pair hacer |Nombre, _asociación| sin_autoconstrucción hacer niño = Enviar(Nombre) niños.concat(Arreglo.envolver(niño)) Si niño end end end end |
#collect_descendants ⇒ Array
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Recopila 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 recopilar_descendientes niños = [] = _niños = {} 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, varios documentos incrustados con id nulos se compararán # igualmente, y algunos documentos no se expandirán. [niño] = true Si niño._id niños << niño += niño._niños end end niños end |
#flag_descendants_persisted ⇒ Matriz
Marca a todos los descendientes como persistentes.
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 |
#hereditario? ⇒ verdadero | falso
Determina si el documento es una subclase de otro documento.
333 334 335 |
# Archivo 'lib/mongoid/traversable.rb', línea 333 def ¿hereditario? yo.clase.¿hereditario? end |
#parentize(documento) ⇒ Documento
Establece una asociación entre elementos secundarios y primarios. Esto se utiliza para objetos recién creados, de modo que puedan agregarse correctamente al gráfico.
346 347 348 |
# Archivo 'lib/mongoid/traversable.rb', línea 346 def parentalizar(Documento) yo._padre = Documento end |
#remove_child(hijo) ⇒ Objeto
Eliminar un documento secundario de este documento principal. Si se incrusta uno, se establece en nulo; de lo contrario, se eliminan muchos de los documentos incrustados.
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._asociación.store_as) eliminar_ivar(Nombre) else relación = Enviar(Nombre) relación._remove(niño) end end |
#reset_persisted_descendants ⇒ Matriz
Una vez que se persisten los descendientes, podemos llamar a esto para mover todos sus cambios y marcarlos como persistentes en una sola llamada.
374 375 376 377 378 379 380 |
# Archivo 'lib/mongoid/traversable.rb', línea 374 def restablecer_descendientes_persistentes _descendants.cada hacer |niño| niño.mover_cambios niño.nuevo_registro = false end _reset_memoized_descendants! end |