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

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

Colapso del resumen del método de instancia

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))

Inicializar el enumerable con una matriz.

Enumerable.new([ post ])

Parámetros:

  • destino (Criterios |Matriz)

    El objeto envuelto.



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

#_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, :_descargado

#_loadedObjeto

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

#_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
  @_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.

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
  yo
end

#==(otro) ⇒ verdadero | falso

Comprueba si el enumerable es igual al otro objeto.

Ejemplos:

Comprobar la igualdad.

enumerable == []

Parámetros:

Devuelve:

  • (verdadero | falso)

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

Ejemplos:

Comprobar igualdad de mayúsculas y minúsculas.

enumerable === Array

Parámetros:

  • otros (Objeto) -

    El objeto a comprobar.

Devuelve:

  • (verdadero | falso)

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

Ejemplos:

¿El enumerable está _loaded?

enumerable._loaded?

Devuelve:

  • (verdadero | falso)

    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

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

Parámetros:

  • *argumentos (Objeto...) -

    Condición que deben cumplir los documentos. Consulte la documentación enumerable para obtener más información.

Devuelve:

  • (verdadero | falso)

    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? || ¿bloque_dado?

  !¿vacío?
end

#as_json(opciones = {}) ⇒ Hash

Envía #as_json a las entradas, sin codificar.

Ejemplos:

Obtener el enumerable como json.

enumerable.as_json

Parámetros:

  • opciones (Hash) (predeterminado: {})

    Parámetros opcionales.

Devuelve:

  • (Hash)

    Todas las entradas se cargan como hash.



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

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

#borrarMatriz

Borra todos los documentos de este enumerable. Si se le pasa un bloque, se accederá a todos los documentos en memoria.

Ejemplos:

Limpiar lo enumerable.

enumerable.clear

Limpia el enumerable con un bloque.

enumerable.clear do |doc|
  doc.unbind
end

Devuelve:

  • (Matriz)

    Los documentos _added borrados.



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

#cloneArray<Document>

Nota:

Esto carga todos los documentos en la memoria.

Clona cada documento en el enumerable.

Ejemplos:

Clonar el enumerable.

enumerable.clone

Devuelve:

  • (Matriz)

    Un clon de matriz 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 eliminar.

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

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:

  • (Matriz)

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

#eachtrue

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.

Ejemplos:

Iterar sobre el enumerable.

enumerable.each do |doc|
  puts doc
end

Devuelve un enumerador que contiene todos los documentos.


a = enumerable.each

Devuelve:

  • (verdadero) -

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

Ejemplos:

¿El enumerable está vacío?

enumerable.empty?

Devuelve:

  • (verdadero | falso)

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

Ejemplos:

Obtenga 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 primera(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:

Obtenga los documentos en memoria.

enumerable.in_memory

Devuelve:

  • (Matriz)

    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 ¿bloque_dado?
  end
end

#¿incluir?(doc) ⇒ verdadero | falso

¿El objetivo incluye el documento proporcionado?

Ejemplos:

¿El objetivo incluye el documento?

enumerable.include?(document)

Parámetros:

  • doc (Documento) -

    El documento a comprobar.

Devuelve:

  • (verdadero | falso)

    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 no ser que _descargado
  _descargado.donde(_id: doc._id).¿Existe? || _agregado.has_key?(doc._id)
end

#inspeccionarCadena

La inspección solo inspeccionará las entradas para lograr una buena impresión en estilo matriz.

Ejemplos:

Inspeccionar lo enumerable.

enumerable.inspect

Devuelve:

  • (Cadena) -

    La enumeración inspeccionada.



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

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 última(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:

  • (Matriz<Object>)

    Los datos volcados.



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.

Ejemplos:

Cargar el proxy.

Marshal.load(proxy)

Devuelve:

  • (Matriz<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, @_descargado, @ejecutado = datos
end

#resetfalse

Restablece el enumerable a su estado persistente.

Ejemplos:

Restablecer el enumerable.

enumerable.reset

Devuelve:

  • (FALSO) -

    Siempre falso.



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.

Ejemplos:

Restablecer los documentos descargados.

enumerable.reset_unloaded(criteria)

Parámetros:

  • criterios (Criterios) -

    Los criterios para sustituir.



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?

Ejemplos:

¿El enumerable responde al método?

enumerable.respond_to?(:sum)

Parámetros:

  • Nombre (Cadena | Símbolo)

    El nombre del método.

  • incluir_privado (true | false) (predeterminado: falso)

    Si se incluirán métodos privados.

Devuelve:

  • (verdadero | falso)

    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

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

Ejemplos:

Obtenga el tamaño.

enumerable.size

Devuelve:

  • (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, 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.

Ejemplos:

Obtener el enumerable como json.

enumerable.to_json

Parámetros:

  • opciones (Hash) (predeterminado: {})

    Parámetros opcionales.

Devuelve:

  • (Cadena) -

    Todas las entradas se cargan como una cadena.



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

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

#uniqArray<Document>

Nota:

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

Devuelve todos los documentos únicos en el enumerable.

Ejemplos:

Obtenga todos los documentos únicos.

enumerable.uniq

Devuelve:

  • (Matriz)

    Los documentos únicos.



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

def único
  entradas.único
end