Class: Mongoid::Contextual::Mongo::DocumentsLoader Privado
- Hereda:
-
Objeto
- Objeto
- Mongoid::Contextual::Mongo::DocumentsLoader
- Ampliado por:
- Reenviable
- Incluye:
- Asociación::Cargable ansioso
- Definido en:
- lib/mongoid/contextual/mongo/documentos_loader.rb
Overview
Esta clase forma parte de una API privada. Evita usar esta clase si es posible, ya que puede ser eliminada o modificada en el futuro.
Carga documentos con los criterios proporcionados.
Resumen de atributos de la instancia colapsar
-
#criteria ⇒ Mongoid::Criteria
privado
Criterios que especifican qué documentos deben cargarse.
Resumen del método de clase colapsar
-
.ejecutor(nombre = Mongoid.async_query_executor) ⇒ Concurrent::ImmediateExecutor | Concurrent::ThreadPoolExecutor
privado
Devuelve el executor adecuado según las opciones de configuración de Mongoid.
-
. ejecutorde consultas asíncronas de grupo de subprocesos global ⇒ Ejecutor de grupo de subprocesos concurrente
privado
Devuelve el ejecutor asincrónico que se utilizará cuando la opción de configuración async_query_executor esté configurada en :global_thread_pool.
-
.immediate_executor ⇒ Concurrent::ImmediateExecutor
privado
Devuelve el ejecutor síncrono para utilizar cuando la opción de configuración async_query_executor está configurada en :immediate.
Resumen del método de instancia colapsar
-
#ejecutar ⇒ arreglo<Mongoid::Document>
privado
Carga registros especificados por '@criteria` desde la base de datos y los convierte en documentos Mongoid de tipo '@klass`.
-
#inicializar(vista, clase, criterios, ejecutor: self.class.executor) ⇒ DocumentsLoader
constructor
privado
Inicializa la instancia del cargador de documentos y programa inmediatamente su ejecución utilizando el ejecutor proporcionado.
-
#¿pendiente? ⇒ verdadero | falso
privado
Devuelve false o true si el cargador está en estado pendiente.
-
#¿comenzar? ⇒ verdadero | falso
privado
Devuelve falso o verdadero si el cargador está en estado iniciado.
-
#unschedule ⇒ objeto
privado
Marca la cargadora como no programada.
Métodos incluidos desde 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.
Inicializa la instancia del cargador de documentos y programa inmediatamente su ejecución utilizando el ejecutor proporcionado.
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: sí mismo.clase.ejecutor) @view = vista @klass = klass @criteria = criterios @mutex = Mutex (exclusión mutua).Nuevo @state = :pendiente @futuro = simultáneo::Promesas.future_on(ejecutor) hacer Inicio && ejecutar end end |
Detalles de los atributos de instancia
#criteria ⇒ Mongoid::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.
75 76 77 |
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 75 def criterios @criteria end |
Detalles del método de clase
.executor(name = Mongoid.async_query_executor) ⇒ Concurrent::ImmediateExecutor | Concurrent::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 executor adecuado según las opciones de configuración de Mongoid.
61 62 63 64 65 66 67 68 69 70 |
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 61 def sí mismo.ejecutor(Nombre = Mongoid.ejecutor de consultas asíncronas) caso Nombre.to_sym Cuando inmediato immediate_executor Cuando :global_thread_pool ejecutor de consultas asíncronas del grupo de subprocesos global else propagar Errors::InvalidQueryExecutor.Nuevo(Nombre) end end |
.global_thread_pool_async_query_executor ⇒ Concurrent::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 un ejecutor asíncrono que se utilizará cuando la opción de configuración async_query_executor esté configurada en :global_thread_pool. Este ejecutor ejecuta operaciones en hilos de segundo plano utilizando un grupo de hilos.
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 sí mismo.ejecutor de consultas asíncronas del grupo de subprocesos global crear_pool = Proc.Nuevo hacer |Simultaneidad| simultáneo::ThreadPoolExecutor.Nuevo( min_threads: 0, máximo_hilos: Simultaneidad, max_queue: Simultaneidad * 4, política de respaldo: :el que llama se ejecuta ) end Simultaneidad = Mongoid.concurrencia_global_executor || 4 @@global_thread_pool_async_query_executor ||= crear_pool.llamar(Simultaneidad) si @@global_thread_pool_async_query_executor.longitud máxima != Simultaneidad old_pool = @@global_thread_pool_async_query_executor @@global_thread_pool_async_query_executor = crear_pool.llamar(Simultaneidad) old_pool.shutdown end @@global_thread_pool_async_query_executor end |
.immediate_executor ⇒ Concurrent::ImmediateExecutor
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 un ejecutor síncrono para usar cuando la opción de configuración async_query_executor está configurada en :immediate. Este ejecutor ejecuta todas las operaciones en el hilo actual, bloqueando según sea necesario.
22 23 24 |
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 22 def sí mismo.immediate_executor @@ejecutor_inmediato ||= simultáneo::ImmediateExecutor.Nuevo end |
Detalles del método de instancia
#ejecutar ⇒ arreglo<Mongoid::documento>
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, este método puede ser llamado directamente, si se desea ejecutar la carga inmediatamente en el hilo llamante.
Llamar a este método no cambia el estado del cargador.
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 eager_load(Documentos) si eager_loadable? 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 false o true si el cargador está en estado pendiente.
El estado pendiente significa que la ejecución del cargador ha sido programada, pero aún no ha comenzado.
107 108 109 110 111 |
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 107 def ¿pendiente? @mutex.sincronizar hacer @state == :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.
Estado iniciado significa que se ha iniciado la ejecución del cargador. Tenga en cuenta que el cargador permanece en este estado incluso después de que la ejecución haya finalizado (con éxito o haya fallado).
121 122 123 124 125 |
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 121 def ¿Has comenzado? @mutex.sincronizar hacer @state == :comenzó end end |
#desprogramar ⇒ Objeto
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Marca la cargadora como no programada.
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 @state = :cancelado a menos que @state == :comenzó end end |