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/asociación/referenciado/tiene_muchos/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.
Colapso delresumen de atributos de instancia
-
#_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 _cargados.(Persisteddocumentsthathavebeen_loaded.) ⇒ Objeto
Las tres variables de instancia principales son colecciones de documentos.
-
#_descargado ⇒ Objeto
Las tres variables de instancia principales son colecciones de documentos.
-
#_unloaded Un criterio que representa los documentos persistentes. (Un criterio que representa losdocumentos persistentes). ⇒ Objeto
Las tres variables de instancia principales son colecciones de documentos.
Colapso del resumen del método de instancia
-
#<<(documento) ⇒ Documento (también: #push)
Añadir un documento al enumerable.
-
#==(otro) ⇒ verdadero | falso
Comprueba si el enumerable es igual al otro objeto.
-
#===(otro) ⇒ verdadero | falso
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 han ejecutado los criterios o si cargamos todo manualmente.
-
#¿alguna?(*args) ⇒ verdadero | falso
Devuelve si la asociación tiene algún documento, opcionalmente sujeto a los filtros proporcionados.
-
#as_json(opciones = {}) ⇒ Hash
Envía #as_json a las entradas, sin codificar.
-
#clear ⇒ Array<Document>
Borra todos los documentos de este enumerable.
-
#clonar ⇒ Array<Document>
Clona cada documento en el enumerable.
-
#delete(document) {|doc| ... } ⇒ Document
Borra el documento proporcionado del enumerador.
-
#delete_if(&block) ⇒ Matriz<Document>
Elimina todos los documentos en el enumerable donde el bloque devuelve verdadero.
-
#cada ⇒ verdadero
Al iterar sobre este enumerable se deben tener en cuenta algunos escenarios diferentes.
-
#¿vacío? ⇒ verdadero | falso
¿Está vacío el enumerable? Se determinará si el conteo es cero según si está cargado o no.
-
#first(limit = nil) ⇒ Document
Obtenga el primer documento del enumerable.
-
#en_memoria ⇒ Matriz<Document>
Devuelve todos los documentos en el enumerable que se han _cargado o _agregado.
-
#¿incluir?(doc) ⇒ verdadero | falso
¿El objetivo incluye 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 solo inspeccionará las entradas para lograr una buena impresión en estilo matriz.
-
#last(limit = nil) ⇒ Document
Obtener el último documento del 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 un proxy enumerable.
-
#reset ⇒ false
Restablece el enumerable a su estado persistente.
-
#reset_unloaded(criteria) ⇒ objeto
Restablece el objeto de criterios descargado subyacente con uno nuevo.
-
#responder_a?(nombre, incluir_privado = falso) ⇒ verdadero | falso
¿Este enumerable responde al método proporcionado?
-
#tamaño ⇒ Entero (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 el 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(destino, base = nulo, asociación = nulo) @_base = base @_asociación = asociación Si destino.is_a?(Criterios) @_agregado, @ejecutado, @_cargado, @_descargado = {}, false, {}, destino else @_agregado, @ejecutado = {}, true @_cargado = destino.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, :_descargado |
#_loaded ⇒ 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 _cargado @_cargado end |
#_loaded Documentos persistentes que han sido _cargados.(Persisteddocumentsthathavebeen_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, :_descargado |
#_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 @_descargado end |
#_unloaded Un criterio que representa los documentos persistentes. (Uncriterio que representa los documentos persistentes). ⇒ 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, :_descargado |
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 yo end |
#==(otro) ⇒ verdadero | falso
Comprueba 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 no ser 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 no ser que otros.respond_to?(:entradas) entradas === otros.entradas end |
#_cargado? ⇒ verdadero | falso
¿Se ha cargado el enumerable? Esto será cierto si se han ejecutado los criterios o si cargamos todo manualmente.
353 354 355 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 353 def _¿cargado? !!@ejecutado end |
#¿alguna?(*args) ⇒ verdadero | falso
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 algún documento persistente y si tiene algún documento que aún no está persistente.
Si la asociación ya está cargada, este método inspecciona los documentos cargados y no consulta la base de datos. Si la asociación no está cargada, la versión sin argumentos ni bloques no la carga; las demás versiones (que delegan en Enumerable) pueden o no cargar la asociación completamente, dependiendo de si se itera hasta el final.
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 Enumerable de la biblioteca estándar.
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? || ¿bloque_dado? !¿vacío? end |
#as_json(opciones = {}) ⇒ Hash
Envía #as_json a las entradas, sin codificar.
469 470 471 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 469 def como_json( = {}) entradas.como_json() end |
#borrar ⇒ Matriz
Borra todos los documentos de este enumerable. Si se le pasa un bloque, se accederá a todos los documentos en memoria.
79 80 81 82 83 84 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 79 def borrar Si ¿bloque_dado? 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 en el 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 no ser que doc Si _descargado && _descargado.donde(_id: Documento._id).¿Existe? rendimiento(Documento) Si ¿bloque_dado? return Documento end end rendimiento(doc) Si ¿bloque_dado? 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 eliminar_si(Ybloque) ¡cargar_todo! eliminado = en_memoria.Seleccione(Ybloque) eliminado.cada hacer |doc| _cargado.borrar(doc._id) _agregado.borrar(doc._id) end yo end |
#each ⇒ true
Al iterar sobre este enumerable se deben tener en cuenta 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, devuelve un enumerador que contiene todos los documentos.
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 no ser que ¿bloque_dado? return to_enum end Si _¿cargado? _cargado.each_pair hacer |ID., doc| Documento = _agregado.borrar(doc._id) || doc establecer_base(Documento) rendimiento(Documento) end else documentos_descargados.cada hacer |doc| Documento = _agregado.borrar(doc._id) || _cargado.borrar(doc._id) || doc _cargado[Documento._id] = Documento establecer_base(Documento) rendimiento(Documento) end end _agregado.each_pair hacer |ID., doc| rendimiento(doc) end @ejecutado = true end |
#¿vacío? ⇒ verdadero | falso
¿Está vacío el enumerable? Se determinará si el conteo es cero según si está cargado 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 a _id cuando no hay otra definida en los criterios puede causar problemas de rendimiento. Si experimenta un rendimiento deficiente inesperado al usar #first o #last, use #take en su lugar. Tenga en cuenta que #take no garantiza el orden.
Obtiene el primer documento del enumerable. Primero revisa los documentos persistentes. No carga el enumerable completo.
246 247 248 249 250 251 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 246 def primera(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 ¿bloque_dado? end end |
#¿incluir?(doc) ⇒ verdadero | falso
¿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 no ser que _descargado _descargado.donde(_id: doc._id).¿Existe? || _agregado.has_key?(doc._id) end |
#inspeccionar ⇒ Cadena
La inspección solo inspeccionará las entradas para lograr una buena impresión en estilo matriz.
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 a _id cuando no hay otra definida en los criterios puede causar problemas de rendimiento. Si experimenta un rendimiento deficiente inesperado al usar #first o #last, use #take en su lugar. Tenga en cuenta que #take no garantiza el orden.
Obtiene el último documento del enumerable. Primero revisa los documentos nuevos. No carga el enumerable completo.
331 332 333 334 335 336 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 331 def última(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 volcado de mariscal [_agregado, _cargado, _descargado, @ejecutado] end |
#marshal_load(datos) ⇒ Array<Object>
Carga los datos necesarios para Marshal.load 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, @_descargado, @ejecutado = datos end |
#reset ⇒ false
Restablece el enumerable a su estado persistente.
383 384 385 386 387 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 383 def RESET _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) @_descargado = criterios Si _descargado.is_a?(Criterios) end |
#responder_a?(nombre, incluir_privado = falso) ⇒ verdadero | falso
¿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 |
#tamaño ⇒ Entero 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, entonces coincidirá con el conjunto de documentos # que pertenecen a esta asociación, que ya han sido persistidos # a la base de datos. Este conjunto de documentos debe tenerse en cuenta al # calcular el tamaño de la asociación, junto con todo lo 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 una matriz. # de artículos y algunos de ellos ya eran elementos 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(opciones = {}) ⇒ Cadena
Envía #to_json a las entradas.
457 458 459 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 457 def a_json( = {}) entradas.a_json() end |
#uniq ⇒ Array<Document>
Esta operación carga todos los documentos de la base de datos.
Devuelve todos los documentos únicos en el enumerable.
481 482 483 |
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 481 def único entradas.único end |