Class: Mongoid::Contextual::Mongo::DocumentsLoader Privado

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

Resumen del método de clase colapsar

Resumen del método de instancia colapsar

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.

Parámetros:

  • vista (Mongo::Collection::View)

    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 (Concurrent::AbstractExecutorService) (por defecto: self.class.executor)

    Ejecutor que es capaz de ejecutar instancias de '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: 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

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

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:

  • (Concurrent::ImmediateExecutor | Concurrent::ThreadPoolExecutor)

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

Aumenta:



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

Devuelve:

  • (Concurrent::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 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_executorConcurrent::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.

Devuelve:

  • (Concurrent::ImmediateExecutor)

    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 sí mismo.immediate_executor
  @@ejecutor_inmediato ||= simultáneo::ImmediateExecutor.Nuevo
end

Detalles del método de instancia

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

Devuelve:

  • (arreglo<Mongoid::Document>)

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

Devuelve:

  • (true | false)

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



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

Devuelve:

  • (true | false)

    verdadero si el cargador está en estado inicializado; en caso contrario, falso.



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

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

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