Módulo: Mongoid::Traversable

Ampliado por:
ActiveSupport::Concern
Incluido en:
Compuesto
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 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

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

Devuelve:

  • (Array<documento>)

    Todos los documentos secundarios de la jerarquía.



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.

Devuelve:

  • (Array<documento>)

    Todos los documentos descendientes en la jerarquía.



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

#_parentMongoid::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.

Devuelve:



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.

Parámetros:

  • Documento (Mongoid::Document | nil)

    el documento que se establecerá como documento padre.



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.

Devuelve:

  • (nil)

    nil.



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

#_rootDocument

Devuelve el documento raíz en el grafo de objetos. Si el documento actual es el objeto raíz en el grafo, devolverá self.

Ejemplos:

Obtén el documento raíz en la jerarquía.

document._root

Devuelve:

  • (documento)

    El documento raíz en la jerarquía.



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?

Ejemplos:

¿El documento es la raíz?

document._root?

Devuelve:

  • (true | false)

    Si el documento es la raíz.



413
414
415
# Archivo 'lib/mongoid/traversable.rb', línea 413

def _root?
  _parent ? false : true
end

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

Devuelve:

  • (Array<documento>)

    Los niños y niñas.



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|
    embedded_relations.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_descendantsArray<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.

Devuelve:



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 = []
  to_expand = _children
  Ampliado = {}

  hasta to_expand.¿vacío?
    en expansión = to_expand
    to_expand = []
    en expansión.cada hacer |niño|
      siguiente si Ampliado[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.
      Ampliado[niño] = true si niño._id
      hijo << niño
      to_expand += niño._children
    end
  end

  hijo
end

#flag_descendants_persistedMatriz

Marca todos los descendientes como persistidos.

Devuelve:

  • (Array<documento>)

    Los descendientes marcados.



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.

Ejemplos:

Comprobar si el documento es una subclase

Square.new.hereditary?

Devuelve:

  • (true | false)

    Verdadero si es hereditario, falso si no.



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.

Ejemplos:

Configura el documento principal.

document.parentize(parent)

Parámetros:

  • Documento (documento)

    El documento principal.

Devuelve:



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.

Ejemplos:

Remover al niño.

document.remove_child(child)

Parámetros:

  • niño (documento)

    El documento secundario (incrustado) a remover.



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.¿uno_incrustado?
    atributos.borrar(niño._association.store_as)
    remove_ivar(Nombre)
  else
    relación = enviar(Nombre)
    relación.remover(niño)
  end
end

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

Devuelve:



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