Clase: Mongoid::Contextual::Mongo::DocumentsLoader Privado

Hereda:
Objeto
  • Objeto
Mostrar todo
Ampliado por:
Reenviable
Incluye:
Asociación::EagerLoadable
Definido en:
lib/mongoid/contextual/mongo/documentos_loader.rb

Overview

Esta clase forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

Carga documentos según los criterios proporcionados.

Colapso delresumen de atributos de instancia

Colapso delresumen del método de clase

Colapso del resumen del método de instancia

Métodos incluidos en Association::EagerLoadable

#carga_ansiosa, #cargable_ansiosa?, #precarga

Detalles del constructor

#inicializar(vista, clase, criterios, ejecutor: self.class.executor) ⇒ DocumentsLoader

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Crea una instancia del cargador de documentos y programa inmediatamente su ejecución utilizando el ejecutor proporcionado.

Parámetros:

  • vista (Mongo::Colección::Vista)

    La vista de colección para obtener registros de la base de datos.

  • klass (Clase) -

    Clase del modelo Mongoid para instanciar documentos. Todos los registros obtenidos de la base de datos se convertirán a una instancia de esta clase, si es posible.

  • criterios (Mongoid::Criterios)

    Criterios que especifican qué documentos deben cargarse.

  • ejecutor (Concurrente::AbstractExecutorService) (por defecto: self.class.executor)

    Ejecutor capaz de ejecutar instancias 'Concurrent::Promises::Future'.



89
90
91
92
93
94
95
96
97
98
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 89

def inicializar(vista, klass, criterios, ejecutor: yo.clase.ejecutor)
  @view = vista
  @klass = klass
  @criteria = criterios
  @mutex = Mutex.Nuevo
  @estado = :pendiente
  @futuro = Concurrente::Promesas.future_on(ejecutor) hacer
    Inicio && ejecutar
  end
end

Detalles de los atributos de instancia

#criteriaMongoid::Criteria

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve los criterios que especifican qué documentos deben ser cargados. Se expone aquí porque el método ‘eager_loadable?’ de `Association::EagerLoadable` espera que esto esté disponible.

Devuelve:

  • (Mongoid::Criterios)

    Criterios que especifican qué documentos deben cargarse. Se exponen aquí porque el método 'eager_loadable?' de 'Association::EagerLoadable' espera que estén disponibles.



75
76
77
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 75

def criterios
  @criteria
end

Detalles del método de clase

.ejecutor(nombre = Mongoid.async_query_executor) ⇒ Concurrente::ImmediateExecutor | Concurrente::ThreadPoolExecutor

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve el ejecutor adecuado según las opciones de configuración de Mongoid.

Parámetros:

  • Nombre (Cadena | Símbolo) (predeterminado: Mongoid.async_query_executor)

    El nombre del ejecutor de consultas puede ser :immediate o :global_thread_pool. El valor predeterminado es la opción de configuración 'async_query_executor'.

Devuelve:

  • (Concurrente::Ejecutor inmediato | Concurrente::Ejecutor de grupo de subprocesos)

    El ejecutor que se utilizará para ejecutar tareas de carga de documentos.

Aumentos:



61
62
63
64
65
66
67
68
69
70
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 61

def yo.ejecutor(Nombre = Mongoid.ejecutor de consultas asíncronas)
  caso Nombre.a_sym
  Cuando :inmediato
    ejecutor inmediato
  Cuando :grupo de subprocesos global
    ejecutor de consultas asíncronas del grupo de subprocesos global
  else
    propagar Errors::InvalidQueryExecutor.Nuevo(Nombre)
  end
end

. ejecutor de consultas asíncronasde grupo de subprocesos globalEjecutor de grupo de subprocesos concurrente

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve el ejecutor asincrónico que se usará cuando la opción de configuración async_query_executor esté establecida en :global_thread_pool. Este ejecutor ejecuta operaciones en subprocesos en segundo plano mediante un grupo de subprocesos.

Devuelve:

  • (Concurrente::ThreadPoolExecutor)

    El ejecutor que se utilizará para ejecutar tareas de carga de documentos.



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 32

def yo.ejecutor de consultas asíncronas del grupo de subprocesos global
  crear_pool = Proc.Nuevo hacer |Simultaneidad|
    Concurrente::Ejecutor del grupo de subprocesos.Nuevo(
      min_threads: 0,
      máximo_hilos: Simultaneidad,
      cola máxima: Simultaneidad * 4,
      política de respaldo: :el que llama se ejecuta
    )
  end
  Simultaneidad = Mongoid.concurrencia_del_ejecutor_global || 4
  Ejecutor de consultas asíncronas de @@global_thread_pool ||= crear_pool.llamada(Simultaneidad)
  Si Ejecutor de consultas asíncronas de @@global_thread_pool.longitud máxima != Simultaneidad
    piscina vieja = Ejecutor de consultas asíncronas de @@global_thread_pool
    Ejecutor de consultas asíncronas de @@global_thread_pool = crear_pool.llamada(Simultaneidad)
    piscina vieja.shutdown
  end
  Ejecutor de consultas asíncronas de @@global_thread_pool
end

.ejecutor_inmediatoConcurrente::EjecutorInmediato

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve el ejecutor síncrono que se usará cuando la opción de configuración async_query_executor esté establecida en :immediate. Este ejecutor ejecuta todas las operaciones en el hilo actual, bloqueándose según sea necesario.

Devuelve:

  • (Concurrente::Ejecutor inmediato)

    El ejecutor que se utilizará para ejecutar tareas de carga de documentos.



22
23
24
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 22

def yo.ejecutor inmediato
  @@ejecutor_inmediato ||= Concurrente::Ejecutor inmediato.Nuevo
end

Detalles del método de instancia

#ejecutarArray

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Carga registros especificados por '@criteria` desde la base de datos y los convierte en documentos Mongoid de tipo '@klass`.

Este método es llamado por la tarea (posiblemente asíncrona) programada al crear una instancia del cargador. Sin embargo, se puede llamar directamente si se desea ejecutar la carga inmediatamente en el hilo que lo llama.

Llamar a este método no cambia el estado del cargador.

Devuelve:

  • (Matriz)

    Matriz de documentos cargados desde la base de datos.



152
153
154
155
156
157
158
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 152

def ejecutar
  Documentos = @view.map hacer |doc|
    Fábrica.desde_db(@klass, doc, @criteria)
  end
  carga ansiosa(Documentos) Si ¿ansioso_cargable?
  Documentos
end

#pendiente?verdadero | falso

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve falso o verdadero si el cargador está en estado pendiente.

El estado pendiente significa que la ejecución del cargador se ha programado, pero aún no se ha iniciado.

Devuelve:

  • (verdadero | falso)

    verdadero si el cargador está en estado pendiente, de lo contrario falso.



107
108
109
110
111
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 107

def ¿pendiente?
  @mutex.sincronizar hacer
    @estado == :pendiente
  end
end

#¿iniciado?verdadero | falso

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve falso o verdadero si el cargador está en estado iniciado.

El estado iniciado significa que la ejecución del cargador ha comenzado. Tenga en cuenta que el cargador permanece en este estado incluso después de que la ejecución se complete (con éxito o sin éxito).

Devuelve:

  • (verdadero | falso)

    verdadero si el cargador está en estado iniciado, de lo contrario falso.



121
122
123
124
125
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 121

def ¿comenzó?
  @mutex.sincronizar hacer
    @estado == :comenzó
  end
end

#desprogramarObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Marcar el cargador como no programado.

Si el cargador está marcado como no programado, no se ejecutará. La única opción para cargar los documentos es llamar directamente al método "execute".

Tenga en cuenta que si la ejecución de una tarea ya se ha iniciado, la desprogramación no tendrá ningún efecto.



134
135
136
137
138
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 134

def no programado
  @mutex.sincronizar hacer
    @estado = :cancelado a no ser que @estado == :comenzó
  end
end