Clase: Mongoid::Asociación::Referenciado::TieneMuchos::Enumerable

Hereda:
Objeto
  • Objeto
Mostrar todo
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

Resumen del método de instancia colapsar

Detalles del constructor

#initialize(target, base = nil, association = nil) ⇒ Enumerable

Inicializa el nuevo enumerable con criterios o un arreglo.

Ejemplos:

Inicializar el enumerable con criterios.

Enumberable.new(Post.where(:person_id => id))

Inicializa el enumerable con un arreglo.

Enumerable.new([ post ])

Parámetros:



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

#_addedObjeto

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

#_loadedObject

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

#_unloadedobjeto

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.

Ejemplos:

Agrega el documento.

enumerable << document

Parámetros:

  • Documento (documento)

    El documento a adjuntar.

Devuelve:



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.

Ejemplos:

Comprobar la igualdad.

enumerable == []

Parámetros:

Devuelve:

  • (true | false)

    Si los objetos son iguales.



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.

Ejemplos:

Comprobar igualdad de mayúsculas y minúsculas.

enumerable === Array

Parámetros:

  • Otros (objeto)

    El objeto para comprobar.

Devuelve:

  • (true | false)

    Si los objetos son iguales en un caso.



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.

Ejemplos:

¿Está cargada la colección enumerable?

enumerable._loaded?

Devuelve:

  • (true | false)

    Si el enumerable ha sido cargado.



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.

Parámetros:

  • *argumentos (objeto...)

    La condición que deben cumplir los documentos. Consulte la documentación de Enumerable para obtener más detalles.

Devuelve:

  • (true | false)

    Si la asociación tiene algún documento.



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.

Ejemplos:

Obtener el enumerable como json.

enumerable.as_json

Parámetros:

  • opciones (Hash) (por defecto: {})

    Parámetros opcionales.

Devuelve:

  • (encriptada)

    Todas las entradas se cargan como hash.



469
470
471
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 469

def as_json(opciones = {})
  entradas.as_json(opciones)
end

#cleararreglo<documento>

Borra todos los documentos en esta enumeración. Si se registra un bloque, se cederá a cada documento que esté en la memoria.

Ejemplos:

Vaciar el enumerable.

enumerable.clear

Limpie el enumerable con un bloque.

enumerable.clear do |doc|
  doc.unbind
end

Devuelve:

  • (Array<documento>)

    Se eliminaron los _docs. añadidos.



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

#cloneArray<Document>

Nota:

Esto carga todos los documentos en la memoria.

Clona cada documento del enumerable.

Ejemplos:

Clona el enumerable.

enumerable.clone

Devuelve:

  • (Array<documento>)

    Un clon del arreglo 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.

Ejemplos:

Eliminar el documento.

enumerable.delete(document)

Parámetros:

  • Documento (documento)

    El documento a borrar.

Rendimientos:

  • (doc)

Devuelve:



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>

Nota:

Esta operación carga todos los documentos de la base de datos.

Elimina todos los documentos en el enumerable donde el bloque devuelve verdadero.

Ejemplos:

Eliminar todos los documentos coincidentes.

enumerable.delete_if do |doc|
  dod._id == _id
end

Devuelve:

  • (Array<documento>)

    Los documentos restantes.



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

#eachtrue

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.

Ejemplos:

Iterar sobre el enumerable.

enumerable.each do |doc|
  puts doc
end

Devuelve un enumerador que contiene todos los documentos.


a = enumerable.each

Devuelve:

  • (cierto)

    Que el enumerable ahora está _cargado.



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.

Ejemplos:

¿Está vacío el enumerable?

enumerable.empty?

Devuelve:

  • (true | false)

    Si el enumerable está vacío.



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

Nota:

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.

Ejemplos:

Obtén el primer documento.

enumerable.first

Parámetros:

  • limit (Entero) (predeterminado: nulo)

    El número de documentos a devolver.

Devuelve:

  • (documento)

    El primer documento encontrado.



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_memoryArray<Document>

Nota:

Al pasarle un bloque, se ejecuta para cada documento.

Devuelve todos los documentos en el enumerable que se han _cargado o _agregado.

Ejemplos:

Obtén los Docs en memoria.

enumerable.in_memory

Devuelve:

  • (Array<documento>)

    Los documentos en memoria.



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?

Ejemplos:

¿El objetivo incluye el documento?

enumerable.include?(document)

Parámetros:

  • doc (documento)

    El documento a comprobar.

Devuelve:

  • (true | false)

    Si el documento está en el destino.



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

#inspectString

La inspección simplemente inspeccionará las entradas para una impresión elegante al estilo de arreglo.

Ejemplos:

Inspeccionar el enumerable.

enumerable.inspect

Devuelve:

  • (string)

    El enum inspeccionado.



296
297
298
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 296

def inspeccionar
  entradas.inspeccionar
end

#last(limit = nil) ⇒ Document

Nota:

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.

Ejemplos:

Obtenga el último documento.

enumerable.last

Parámetros:

  • limit (Entero) (predeterminado: nulo)

    El número de documentos a devolver.

Devuelve:

  • (documento)

    El último documento encontrado.



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_dumpMatriz<Object>

Proporciona los datos necesarios para Marshal.dump un proxy enumerable.

Ejemplos:

Desechar el proxy.

Marshal.dump(proxy)

Devuelve:

  • (arreglo<Object>)

    Los datos volcados.



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.

Ejemplos:

Cargar el proxy.

Marshal.load(proxy)

Devuelve:

  • (arreglo<Object>)

    Los datos volcados.



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

#resetfalse

Restablece el elemento enumerable a su estado persistente.

Ejemplos:

Restablece el enumerable.

enumerable.reset

Devuelve:

  • (false)

    Siempre falso.



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.

Ejemplos:

Restablecer los documentos descargados.

enumerable.reset_unloaded(criteria)

Parámetros:

  • criterios (Criterios)

    El criterio a reemplazar.



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?

Ejemplos:

¿El enumerable responde al método?

enumerable.respond_to?(:sum)

Parámetros:

  • Nombre (String | Símbolo)

    El nombre del método.

  • incluir_privado (true | false) (por defecto: false)

    Si incluir métodos privados.

Devuelve:

  • (true | false)

    Si el enumerable responde.



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

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

Ejemplos:

Obtén el tamaño.

enumerable.size

Devuelve:

  • (Número entero)

    El tamaño del enumerable.



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.

Ejemplos:

Obtener el enumerable como json.

enumerable.to_json

Parámetros:

  • opciones (Hash) (por defecto: {})

    Parámetros opcionales.

Devuelve:

  • (string)

    Todas las entradas _cargadas como una string.



457
458
459
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 457

def to_json(opciones = {})
  entradas.to_json(opciones)
end

#uniqArray<Document>

Nota:

Esta operación carga todos los documentos de la base de datos.

Devuelve todos los documentos únicos en lo enumerable.

Ejemplos:

Obtenga todos los documentos únicos.

enumerable.uniq

Devuelve:

  • (Array<documento>)

    Los documentos únicos.



481
482
483
# Archivo 'lib/mongoid/association/referenced/has_many/enumerable.rb', línea 481

def único
  entradas.único
end