Clase: Mongoid::Asociación::Referenciado::TieneMuchos::Enumerable
- Hereda:
-
Objeto
- Objeto
- Mongoid::Asociación::Referenciado::TieneMuchos::Enumerable
- Ampliado por:
- Reenviable
- Incluye:
- Enumerable
- Definido en:
- lib/mongoid/association/referenced/has_many/enumerable.rb
Overview
Esta clase es el contenedor para todas las asociaciones referenciadas que tienen un destino que puede ser un criterio o un arreglo de documentos _cargados. Esto gestiona ambos casos o una combinación de los dos.
Resumen de atributos de la instancia colapsar
-
#_added ⇒ Objeto
Las tres variables de instancia principales son colecciones de documentos.
-
#_added Documentos que se han adjuntado.(Documentsthathavebeenappended.) ⇒ Objeto
Las tres variables de instancia principales son colecciones de documentos.
-
#_loaded ⇒ Objeto
Las tres variables de instancia principales son colecciones de documentos.
-
#_loaded Documentos persistentes que han sido _loaded.(Documentospersistentesquehanestado_loaded.) ⇒ Objeto
Las tres variables de instancia principales son colecciones de documentos.
-
#_unloaded ⇒ Objeto
Las tres variables de instancia principales son colecciones de documentos.
-
#_unloaded Un criterio que representa Docs persistidos.(Acriteriarepresentingpersisteddocs.) ⇒ Objeto
Las tres variables de instancia principales son colecciones de documentos.
Resumen del método de instancia colapsar
-
#<<(documento) ⇒ Documento (también: #push)
Añadir un documento al enumerable.
-
#==(otro) ⇒ verdadero | falso
Verifique si el enumerable es igual al otro objeto.
-
#===(otro) ⇒ true | false
Verifica la igualdad del enumerable con el objeto proporcionado para instrucciones case.
-
#_cargado? ⇒ verdadero | falso
¿Se ha _cargado el enumerable? Esto será cierto si se ha ejecutado el criterio o si cargamos manualmente todo el proceso.
-
#¿alguna?(*args) ⇒ verdadero | falso
Devuelve si la asociación tiene algún documento, opcionalmente sujeto a los filtros proporcionados.
-
#as_json(opciones = {}) ⇒ Hash
Envíe #as_json a las entradas, sin codificar.
-
#borrar ⇒ Array<Document>
Borra todos los documentos presentes en este enumerable.
-
#clone ⇒ Array<Document>
Clona cada documento del enumerable.
-
#delete(document) {|doc| ... } ⇒ Document
Borra el documento proporcionado del enumerador.
-
#delete_if(&block) ⇒ arreglo<Document>
Elimina todos los documentos en el enumerable donde el bloque devuelve verdadero.
-
#each ⇒ true
Iterar sobre este enumerable tiene que gestionar algunos escenarios diferentes.
-
#¿vacío? ⇒ true | false
¿Está el enumerable vacío? Se determinará si el recuento es cero en función de si está _loaded o no.
-
#first(limit = nil) ⇒ Document
Obtenga el primer documento del enumerable.
-
#in_memory ⇒ Array<Document>
Devuelve todos los documentos en el enumerable que se han _cargado o _agregado.
-
#incluir?(doc) ⇒ true | false
¿Incluye el objetivo el documento proporcionado?
-
#initialize(target, base = nil, association = nil) ⇒ Enumerable
constructor
Inicializa el nuevo enumerable con criterios o un arreglo.
-
#inspeccionar ⇒ Cadena
La inspección simplemente inspeccionará las entradas para una impresión elegante al estilo de arreglo.
-
#last(limit = nil) ⇒ Document
Obtén el último documento en el enumerable.
-
#marshal_dump ⇒ Matriz<Object>
Proporciona los datos necesarios para Marshal.dump un proxy enumerable.
-
#marshal_load(datos) ⇒ Array<Object>
Carga los datos necesarios para Marshal.load en un proxy enumerable.
-
#reset ⇒ false
Restablece el elemento enumerable a su estado persistente.
-
#reset_unloaded(criteria) ⇒ objeto
Restablece el objeto de criterios descargado subyacente con uno nuevo.
-
#respond_to?(nombre, include_private = false) ⇒ true | false
¿Este objeto enumerable responde al método proporcionado?
-
#tamaño ⇒ Integer (también: #longitud)
Obtiene el tamaño total de este enumerable.
-
#to_json(opciones = {}) ⇒ Cadena
Envía #to_json a las entradas.
-
#uniq ⇒ Array<Document>
Devuelve todos los documentos únicos en lo enumerable.
Detalles del constructor
#initialize(target, base = nil, association = nil) ⇒ Enumerable
Inicializa el nuevo enumerable con criterios o un arreglo.
262 263 264 265 266 267 268 269 270 271 272 273 274 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 262 def inicializar(Objetivo, base = nulo, asociación = nulo) @_base = base @_association = asociación si Objetivo.is_a?(Criterios) @_agregado, @ejecutado, @_cargado, @_unloaded = {}, false, {}, Objetivo else @_agregado, @ejecutado = {}, true @_cargado = Objetivo.inyectar({}) hacer |_objetivo, doc| _objetivo[doc._id] = doc si doc _objetivo end end end |
Detalles de los atributos de instancia
#_added ⇒ Objeto
Las tres variables de instancia principales son colecciones de documentos.
21 22 23 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 21 def _agregado @_agregado end |
#_added Documentos que se han anexado.(Documentsthathavebeenappended.) ⇒ Objeto
Las tres variables de instancia principales son colecciones de documentos.
21 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 21 attr_accessor :_agregado, _cargado, :_unloaded |
#_loaded ⇒ Object
Las tres variables de instancia principales son colecciones de documentos.
21 22 23 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 21 def _cargado @_cargado end |
#_loaded Documentos persistidos que se han _loaded.(Documentospersistidosquesehan_loaded.) ⇒ objeto
Las tres variables de instancia principales son colecciones de documentos.
21 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 21 attr_accessor :_agregado, _cargado, :_unloaded |
#_unloaded ⇒ objeto
Las tres variables de instancia principales son colecciones de documentos.
21 22 23 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 21 def descargado @_unloaded end |
#_unloaded Un criterio que representa documentos almacenados de modo persistente.(Uncriterioquerepresentadocumentosalmacenadosdemodopersistente.) ⇒ objeto
Las tres variables de instancia principales son colecciones de documentos.
21 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 21 attr_accessor :_agregado, _cargado, :_unloaded |
Detalles del método de instancia
#<<(documento) ⇒ Documento También conocido como: push
Añadir un documento al enumerable.
60 61 62 63 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 60 def <<(Documento) _agregado[Documento._id] = Documento sí mismo end |
#==(otro) ⇒ verdadero | falso
Verifique si el enumerable es igual al otro objeto.
33 34 35 36 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 33 def ==(Otros) return false a menos que Otros.respond_to?(entradas:) entradas == Otros.entradas end |
#===(otro) ⇒ verdadero | falso
Verifica la igualdad del enumerable con el objeto proporcionado para instrucciones case.
47 48 49 50 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 47 def ===(Otros) return false a menos que Otros.respond_to?(entradas:) entradas === Otros.entradas end |
#_cargado? ⇒ true | false
¿Se ha _cargado el enumerable? Esto será cierto si se ha ejecutado el criterio o si cargamos manualmente todo el proceso.
353 354 355 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 353 def _¿cargado? !!@ejecutado end |
#any?(*args) ⇒ true | false
Devuelve si la asociación tiene algún documento, opcionalmente sujeto a los filtros proporcionados.
Este método devuelve verdadero si la asociación tiene documentos persistidos y si tiene documentos que aún no se han persistido.
Si la asociación ya está cargada, este método inspecciona los documentos cargados y no query la base de datos. Si la asociación no está cargada, la versión sin argumentos ni bloques no carga la asociación; las otras versiones (que delegan en Enumerable) pueden o no cargar completamente la asociación dependiendo de si se itera hasta la finalización.
Este método puede tomar un parámetro y un bloque. El comportamiento con el parámetro o el bloque se delega al módulo de librería estándar Enumerable.
Tenga en cuenta que cuando se invoca el método any? de Enumerable con un bloque y un patrón, solo utiliza el patrón.
225 226 227 228 229 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 225 def any?(*args) return super si args.any? || ¿block_given? !¿vacío? end |
#as_json(options = {}) ⇒ Hash
Envíe #as_json a las entradas, sin codificar.
469 470 471 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 469 def as_json( = {}) entradas.as_json() end |
#clear ⇒ arreglo<documento>
Borra todos los documentos en esta enumeración. Si se registra un bloque, se cederá a cada documento que esté en la memoria.
79 80 81 82 83 84 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 79 def borrar si ¿block_given? en memoria { |doc| rendimiento(doc) } end _cargado.borrar y _agregado.borrar end |
#clone ⇒ Array<Document>
Esto carga todos los documentos en la memoria.
Clona cada documento del enumerable.
94 95 96 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 94 def clon collect { |doc| doc.clon } end |
#delete(document) {|doc| ... } ⇒ Document
Borra el documento proporcionado del enumerador.
106 107 108 109 110 111 112 113 114 115 116 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 106 def borrar(Documento) doc = (_cargado.borrar(Documento._id) || _agregado.borrar(Documento._id)) a menos que doc si descargado && descargado.dónde(_id: Documento._id).¿existe? rendimiento(Documento) si ¿block_given? return Documento end end rendimiento(doc) si ¿block_given? doc end |
#delete_if(&block) ⇒ arreglo<documento>
Esta operación carga todos los documentos de la base de datos.
Elimina todos los documentos en el enumerable donde el bloque devuelve verdadero.
129 130 131 132 133 134 135 136 137 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 129 def delete_if(Ybloque) ¡cargar_todo! deleted = en memoria.Seleccionar(Ybloque) deleted.cada hacer |doc| _cargado.borrar(doc._id) _agregado.borrar(doc._id) end sí mismo end |
#each ⇒ true
Iterar sobre este enumerable tiene que gestionar algunos escenarios diferentes.
Si el enumerable tiene sus criterios _cargados en memoria entonces cede a todos los _docs _cargados y a todos los _docs _añadidos.
Si el enumerable no ha _cargado los criterios, entonces itera sobre el cursor mientras carga los documentos y luego itera sobre los _added docs.
Si no se pasa ningún bloque, devolverá un enumerador que contiene todos los Docs.
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 162 def cada a menos que ¿block_given? return to_enum end si _¿cargado? _cargado.each_pair hacer |ID, doc| Documento = _agregado.borrar(doc._id) || doc set_base(Documento) rendimiento(Documento) end else unloaded_documents.cada hacer |doc| Documento = _agregado.borrar(doc._id) || _cargado.borrar(doc._id) || doc _cargado[Documento._id] = Documento set_base(Documento) rendimiento(Documento) end end _agregado.each_pair hacer |ID, doc| rendimiento(doc) end @ejecutado = true end |
#empty? ⇒ true | false
¿Está el enumerable vacío? Se determinará si el recuento es cero en función de si está _loaded o no.
193 194 195 196 197 198 199 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 193 def ¿vacío? si _¿cargado? en memoria.¿vacío? else _agregado.¿vacío? && !descargado.¿existe? end end |
#first(limit = nil) ⇒ Document
Agregar automáticamente una ordenación por _id cuando no se define ninguna otra ordenación en los criterios tiene el potencial de causar problemas de rendimiento. Si experimentas un rendimiento deficiente inesperado al utilizar #first o #last, utiliza #take en su lugar. Ten en cuenta que #take no garantiza la orden.
Obtén el primer documento en el enumerable. Primero comprobará los documentos persistidos. No carga la totalidad del enumerable.
246 247 248 249 250 251 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 246 def primero(limit = nulo) _cargado.intentar(:values).intentar(primero) || _agregado[(ul = descargado.intentar(primero, limit)).intentar(:_identificación)] || ul || _agregado.values.intentar(primero) end |
#in_memory ⇒ Array<Document>
Al pasarle un bloque, se ejecuta para cada documento.
Devuelve todos los documentos en el enumerable que se han _cargado o _agregado.
309 310 311 312 313 314 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 309 def en memoria docs = (_cargado.values + _agregado.values) docs.cada hacer |doc| rendimiento(doc) si ¿block_given? end end |
#include?(doc) ⇒ true | false
¿El objetivo incluye el documento proporcionado?
284 285 286 287 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 284 def incluir?(doc) return super a menos que descargado descargado.dónde(_id: doc._id).¿existe? || _agregado.has_key?(doc._id) end |
#inspect ⇒ String
La inspección simplemente inspeccionará las entradas para una impresión elegante al estilo de arreglo.
296 297 298 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 296 def inspeccionar entradas.inspeccionar end |
#last(limit = nil) ⇒ Document
Agregar automáticamente una ordenación por _id cuando no se define ninguna otra ordenación en los criterios tiene el potencial de causar problemas de rendimiento. Si experimentas un rendimiento deficiente inesperado al utilizar #first o #last, utiliza #take en su lugar. Ten en cuenta que #take no garantiza la orden.
Obtén el último documento del enumerable. Comprobará primero los nuevos documentos. No carga todo el enumerable.
331 332 333 334 335 336 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 331 def último(limit = nulo) _agregado.values.intentar(:último) || _cargado.intentar(:values).intentar(:último) || _agregado[(ul = descargado.intentar(:último, limit)).intentar(:_identificación)] || ul end |
#marshal_dump ⇒ Matriz<Object>
Proporciona los datos necesarios para Marshal.dump un proxy enumerable.
363 364 365 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 363 def marshal_dump [_agregado, _cargado, descargado, @ejecutado] end |
#marshal_load(data) ⇒ arreglo<Object>
Carga los datos necesarios para Marshal.load en un proxy enumerable.
373 374 375 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 373 def carga de mariscal(Datos) @_agregado, @_cargado, @_unloaded, @ejecutado = Datos end |
#reset ⇒ false
Restablece el elemento enumerable a su estado persistente.
383 384 385 386 387 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 383 def restablecer _cargado.borrar _agregado.borrar @ejecutado = false end |
#reset_unloaded(criterios) ⇒ Objeto
Restablece el objeto de criterios descargado subyacente con uno nuevo. Usé mis asociaciones HABTM para mantener la matriz subyacente sincronizada.
396 397 398 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 396 def reinicio_descargado(criterios) @_unloaded = criterios si descargado.is_a?(Criterios) end |
#respond_to?(nombre, include_private = false) ⇒ true | false
¿Este enumerable responde al método proporcionado?
410 411 412 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 410 def respond_to?(Nombre, incluir_privado = false) [].respond_to?(Nombre, incluir_privado) || super end |
#size ⇒ Integer También conocido como: longitud
Obtiene el tamaño total de este enumerable. Es una combinación de todos los documentos persistentes y no persistentes.
421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 421 def tamaño # Si _unloaded está presente, coincidirá con el conjunto de documentos # que pertenecen a esta asociación, que ya han sido almacenados de forma persistente # a la base de datos. Este conjunto de documentos debe tenerse en cuenta al # calculando el tamaño de la asociación, junto con cualquier cosa que tenga # se agregó desde entonces. si descargado si _agregado.any? # Tenga en cuenta que _added puede incluir registros que ya se _descargaron # coincidencias. Este es el caso si a la asociación se le asigna un arreglo # de elementos y algunos ya formaban parte de la asociación. # # por lo tanto, tenemos que asegurarnos de que _unloaded.count excluya cualquier elemento # que ya existen en _added. count = descargado.no(:_identificación.in => _agregado.values.map(Y:id)).count count + _agregado.values.count else descargado.count end else _cargado.count + _agregado.count end end |
#to_json(options = {}) ⇒ String
Envía #to_json a las entradas.
457 458 459 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 457 def to_json( = {}) entradas.to_json() end |
#uniq ⇒ Array<Document>
Esta operación carga todos los documentos de la base de datos.
Devuelve todos los documentos únicos en lo enumerable.
481 482 483 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 481 def único entradas.único end |