Módulo: Mongoid::Threaded

Ampliado por:
Compacto
Incluido en:
Compacto
Definido en:
lib/mongoid/threaded.rb,
lib/mongoid/threaded/lifecycle.rb

Overview

Este módulo contiene lógica para facilitar el acceso a los objetos que tienen un ciclo de vida en el hilo actual.

Definido bajo Namespace

Modules: Ciclo vital

Colapso delresumen constante

DATABASE_OVERRIDE_KEY =
'[mongoid]:db-override'
CLIENTS_KEY =

Constante para la clave para almacenar clientes.

'[mongoid]:clientes'
CLIENT_OVERRIDE_KEY =

La clave para anular el cliente.

'[mongoid]:client-override'
CLAVE_DE_ALCANCE_ACTUAL =

La clave para la pila de alcance del hilo actual.

'[mongoid]:current-scope'
AUTOSAVES_KEY =
'[mongoid]:guardados automáticos'
VALIDATIONS_KEY =
'[mongoid]:validations'
STACK_KEY ==
Picadillo.Nuevo hacer |hash, llave|
  hash[llave] = "[mongoid]:#{key}-pila"
end
SESSIONS_KEY =

La clave para las sesiones del hilo actual.

'[mongoid]:sesiones'
MODIFICADO_DOCUMENTOS_KEY =

La clave para almacenar documentos modificados en transacciones.

'[mongoid]:documentos modificados'
EJECUTAR_RETROLLAMADAS =

La clave que almacena el valor por defecto para indicar si se ejecutan o no las funciones de retorno en los documentos.

'[mongoid]:ejecutar-callbacks'
BIND =
'bind'.freeze
ASIGNAR =
'asignar'.freeze
compilar =
'compilar'.freeze
LOAD =
'load'.freeze
CREAR =
'crear '.freeze

Resumen del método de instancia colapsar

Detalles del método de instancia

#add_modified_document(session, document) ⇒ Object

Almacene una referencia al documento que se modificó dentro de una transacción asociada con la sesión.

Parámetros:

  • sesión (Mongo::Session)

    Sesión en el ámbito de la cual se modificó el documento.

  • Documento (Mongoid::Document)

    Documento de Mongoid que fue modificado.



435
436
437
438
439
Archivo 'lib/mongoid/threaded.rb', línea 435

def add_modified_document(sesión, Documento)
  return a menos que sesión&.en_transacción?

  modified_documents[sesión] << Documento
end

#¿guardado automático?(documento) ⇒ true | false

¿El documento se guarda automáticamente en el hilo actual?

Ejemplos:

¿Se guarda automáticamente el documento?

Threaded.autosaved?(doc)

Parámetros:

  • Documento (documento)

    El documento a comprobar.

Devuelve:

  • (true | false)

    Si el documento se guarda automáticamente.



334
335
336
Archivo 'lib/mongoid/threaded.rb', línea 334

def ¿guardado automáticamente?(Documento)
  guardados automáticos para(Documento.clase).incluir?(Documento._id)
end

#autosavesHash

Obtener todas los guardados automáticos en el hilo actual.

Ejemplos:

Obtener todos los guardados automáticos.

Threaded.autosaves

Devuelve:

  • (encriptada)

    Los autosaves actuales.



356
357
358
Archivo 'lib/mongoid/threaded.rb', línea 356

def guardados automáticos
  Obtener(CLAVE_GUARDADO_AUTOMATICO) { {} }
end

#autosaves_for(klass) ⇒ Array

Obtén todas las autoguardadas en la conversación actual para la clase.

Ejemplos:

Obtener todos los guardados automáticos.

Threaded.autosaves_for(Person)

Parámetros:

  • klass (Clase) -

    La clase para comprobar.

Devuelve:

  • (arreglo)

    Los autosaves actuales.



378
379
380
Archivo 'lib/mongoid/threaded.rb', línea 378

def guardados automáticos para(klass)
  guardados automáticos[klass] ||= []
end

#begin_autosave(document) ⇒ Object

Comience a guardar automáticamente un documento en el hilo actual.

Ejemplos:

Begin autosave.

Threaded.begin_autosave(doc)

Parámetros:

  • Documento (documento)

    El documento para autoguardar.



185
186
187
Archivo 'lib/mongoid/threaded.rb', línea 185

def begin_autosave(Documento)
  guardados automáticos para(Documento.clase).push(Documento._id)
end

#begin_execution(name) ⇒ true

Comience la entrada en una pila local de hilos con nombre.

Ejemplos:

Comienza la entrada en la pila.

Threaded.begin_execution(:create)

Parámetros:

  • Nombre (string)

    El nombre de la pila

Devuelve:

  • (cierto)

    Verdadero.



117
118
119
Archivo 'lib/mongoid/threaded.rb', línea 117

def begin_execution(Nombre)
  stack(Nombre).push(true)
end

#begin_validate(document) ⇒ Objeto

Comenzar a validar un documento en el hilo actual.

Ejemplos:

Begin validation.

Threaded.begin_validate(doc)

Parámetros:

  • Documento (documento)

    El documento a validar.



195
196
197
Archivo 'lib/mongoid/threaded.rb', línea 195

def begin_validate(Documento)
  validaciones_para(Documento.clase).push(Documento._id)
end

#begin_without_default_scope(clase) ⇒ 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.

Comience a suprimir los alcances por defecto para el modelo dado en el hilo actual.

Ejemplos:

Comienza sin la pila de alcances por defecto.

Threaded.begin_without_default_scope(klass)

Parámetros:

  • klass (Clase) -

    El modelo para suprimir el alcance predeterminado.



227
228
229
Archivo 'lib/mongoid/threaded.rb', línea 227

def comenzar_sin_alcance_predeterminado(klass)
  stack(:without_default_scope).push(klass)
end

#clear_modified_documents(session) ⇒ Set<Mongoid::Document>

Borra el conjunto de documentos modificados para la sesión dada y devuelve el contenido del conjunto antes del borrado.

Parámetros:

  • sesión (Mongo::Session)

    Sesión para la cual se debe borrar el conjunto de documentos modificados.

Devuelve:

  • (Conjunto)

    Colección de documentos modificados antes de ser borrados.



448
449
450
Archivo 'lib/mongoid/threaded.rb', línea 448

def borrar_documentos_modificados(sesión)
  modified_documents.borrar(sesión) || []
end

#clear_session(client: nil) ⇒ nil

Nota:

Por compatibilidad con versiones anteriores está permitido llamar a este método sin

Borre la sesión almacenada en caché de este hilo para un cliente.

especificando el parámetro 'cliente'.

Parámetros:

  • Cliente (Mongo::Cliente | nulo) (predeterminado: nulo)

    El cliente para borrar la sesión para.

Devuelve:

  • (nil)


425
426
427
Archivo 'lib/mongoid/threaded.rb', línea 425

def clear_session(cliente: nulo)
  Sesiones.borrar(Cliente)&.fin_sesión
end

#client_overrideString | Symbol

Obtén la invalidación global del cliente.

Ejemplos:

Obtén la invalidación global del cliente.

Threaded.client_override

Devuelve:

  • (String | Símbolo)

    La sobreescritura.



249
250
251
Archivo 'lib/mongoid/threaded.rb', línea 249

def anulación del cliente
  Obtener(CLIENT_OVERRIDE_KEY)
end

#client_override=(nombre) ⇒ String | Symbol

Establece la anulación global del cliente.

Ejemplos:

Establece la anulación global del cliente.

Threaded.client_override = :testing

Parámetros:

  • Nombre (String | Símbolo)

    El nombre de anulación global.

Devuelve:

  • (String | Símbolo)

    La sobreescritura.



261
262
263
Archivo 'lib/mongoid/threaded.rb', línea 261

def client_override=(Nombre)
  conjunto(CLIENT_OVERRIDE_KEY, Nombre)
end

#current_scope(klass = nil) ⇒ Criterios

Obtener el ámbito Mongoid actual.

Ejemplos:

Obtén el alcance.

Threaded.current_scope(klass)
Threaded.current_scope

Parámetros:

  • klass (Klass) (predeterminado: nulo)

    El tipo de clase del scope.

Devuelve:



274
275
276
277
278
279
280
281
282
Archivo 'lib/mongoid/threaded.rb', línea 274

def current_scope(klass = nulo)
  current_scope = Obtener(CURRENT_SCOPE_KEY)

  si klass && current_scope.respond_to?(:llaves)
    current_scope[current_scope.claves.buscar { |k| k <= klass }]
  else
    current_scope
  end
end

#current_scope=(scope) ⇒ Criterios

Establecer el alcance actual de Mongoid.

Ejemplos:

Establece el alcance.

Threaded.current_scope = scope

Parámetros:

Devuelve:



292
293
294
Archivo 'lib/mongoid/threaded.rb', línea 292

def alcance_actual=(Alcance)
  conjunto(CURRENT_SCOPE_KEY, Alcance)
end

#database_overrideString | Symbol

Obtén la anulación global de la base de datos.

Ejemplos:

Obtén la anulación global de la base de datos.

Threaded.database_override

Devuelve:

  • (String | Símbolo)

    La sobreescritura.



127
128
129
Archivo 'lib/mongoid/threaded.rb', línea 127

def database_override
  Obtener(DATABASE_OVERRIDE_KEY)
end

#database_override=(nombre) ⇒ String | Symbol

Establecer la anulación de la base de datos global.

Ejemplos:

Establecer la anulación de la base de datos global.

Threaded.database_override = :testing

Parámetros:

  • Nombre (String | Símbolo)

    El nombre de anulación global.

Devuelve:

  • (String | Símbolo)

    La sobreescritura.



139
140
141
Archivo 'lib/mongoid/threaded.rb', línea 139

def database_override=(Nombre)
  conjunto(DATABASE_OVERRIDE_KEY, Nombre)
end

#borrar(key) ⇒ objeto

Remueve la variable nombrada del almacenamiento local del hilo.

Parámetros:

  • llave (String | Símbolo)

    el nombre de la variable a remover.



84
85
86
Archivo 'lib/mongoid/threaded.rb', línea 84

def borrar(llave)
  conjunto(llave, nulo)
end

#execute_callbacks=(flag) ⇒ Object

Indica si las devoluciones de llamada de documentos deben invocarse de forma predeterminada para el hilo actual. Los documentos individuales pueden anular el comportamiento de la devolución de llamada, pero esto se aplicará al comportamiento predeterminado.

Parámetros:

  • flag (true | false)

    Si las devoluciones de llamada de documentos deben ejecutarse o no por defecto.



474
475
476
Archivo 'lib/mongoid/threaded.rb', línea 474

def execute_callbacks=(flag)
  conjunto(EJECUTAR_LLAMADAS, flag)
end

#ejecutar_devoluciones_de_llamadas?verdadero | falso

Consulta si las devoluciones de llamadas de documentos deben ejecutarse de forma predeterminada para el hilo actual.

A menos que se indique lo contrario (con #execute_callbacks=), esto retornará verdadero.

Devuelve:

  • (true | false)

    Si las devoluciones de llamada de documentos deben ejecutarse o no por defecto.



460
461
462
463
464
465
466
Archivo 'lib/mongoid/threaded.rb', línea 460

def ¿ejecutar_callbacks?
  si ¿tiene?(EJECUTAR_LLAMADAS)
    Obtener(EJECUTAR_LLAMADAS)
  else
    true
  end
end

#¿En ejecución?(nombre) ⇒ true

Están en el medio de la ejecución de la pila nombrada

Ejemplos:

¿Estamos en la ejecución de la pila?

Threaded.executing?(:create)

Parámetros:

  • Nombre (Símbolo)

    El nombre de la pila

Devuelve:

  • (cierto)

    Si se está ejecutando la pila.



151
152
153
Archivo 'lib/mongoid/threaded.rb', línea 151

def ejecutando?(Nombre)
  !stack(Nombre).¿vacío?
end

#exit_autosave(documento) ⇒ Objeto

Salir guardando automáticamente un documento en el hilo actual.

Ejemplos:

Salir del guardado automático.

Threaded.exit_autosave(doc)

Parámetros:

  • Documento (documento)

    El documento para autoguardar.



205
206
207
Archivo 'lib/mongoid/threaded.rb', línea 205

def exit_autosave(Documento)
  guardados automáticos para(Documento.clase).delete_one(Documento._id)
end

#exit_execution(name) ⇒ true

Salir de una pila local de threads con nombre.

Ejemplos:

Salir de la pila.

Threaded.exit_execution(:create)

Parámetros:

  • Nombre (Símbolo)

    El nombre de la pila

Devuelve:

  • (cierto)

    Verdadero.



163
164
165
Archivo 'lib/mongoid/threaded.rb', línea 163

def exit_execution(Nombre)
  stack(Nombre).pop
end

#exit_validate(document) ⇒ Objeto

Salir de la validación de un documento en el hilo actual.

Ejemplos:

Validación de salida.

Threaded.exit_validate(doc)

Parámetros:

  • Documento (documento)

    El documento a validar.



215
216
217
Archivo 'lib/mongoid/threaded.rb', línea 215

def exit_validate(Documento)
  validaciones_para(Documento.clase).delete_one(Documento._id)
end

#exit_without_default_scope(klass) ⇒ 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.

Salir suprimiendo los ámbitos por defecto para el modelo dado en el hilo actual.

Ejemplos:

Salir sin la pila de alcance por defecto.

Threaded.exit_without_default_scope(klass)

Parámetros:

  • klass (Clase) -

    El modelo para eliminar la supresión de la delimitación por defecto.



239
240
241
Archivo 'lib/mongoid/threaded.rb', línea 239

def salida_sin_alcance_predeterminado(klass)
  stack(:without_default_scope).borrar(klass)
end

#obtener(clave, &predeterminado) ⇒ Objeto | nulo

Consulta la variable local de hilo con el nombre dado. Si se proporciona un bloque, y la variable aún no existe, el valor retornado del bloque se establecerá como el valor de la variable antes de devolverla.

Es muy importante que las aplicaciones (y en especial Mongoid) utilicen este método en lugar de Thread#[], ya que Thread#[] se utiliza para variables locales de la fibra, y Mongoid utiliza las fibras como detalle de implementación en algunas devoluciones de llamada. Al colocar el estado local del hilo en un almacén local de la fibra, el estado será invisible cuando se ejecuten devoluciones de llamada relevantes en una fibra diferente.

Las devoluciones de llamada afectadas son devoluciones de llamada en cascada sobre hijos incorporados.

Parámetros:

  • llave (String | Símbolo)

    el nombre de la variable a query

  • predeterminado (Proc)

    Un bloque opcional que debe devolver el valor por defecto (inicial) de esta variable.

Devuelve:

  • (Objeto | nil)

    el valor de la variable solicitada, o nil si no se define y no se ha proporcionado un valor por defecto.



59
60
61
62
63
64
65
66
67
68
Archivo 'lib/mongoid/threaded.rb', línea 59

def Obtener(llave, Ypredeterminado)
  Resultado = Hilo.Actual.thread_variable_get(llave)

  si Resultado.nil? && predeterminado
    Resultado = rendimiento
    conjunto(llave, Resultado)
  end

  Resultado
end

#get_session(client: nil) ⇒ Mongo::Session | nil

Nota:

Por compatibilidad con versiones anteriores está permitido llamar a este método sin

Obtén la sesión en caché para este hilo para un cliente.

especificando el parámetro 'cliente'.

Parámetros:

  • Cliente (Mongo::Cliente | nulo) (predeterminado: nulo)

    El cliente para almacenar en caché la sesión.

Devuelve:

  • (Mongo::Session | nil)

    La sesión almacenada en caché en este hilo o nula.



413
414
415
Archivo 'lib/mongoid/threaded.rb', línea 413

def get_session(cliente: nulo)
  Sesiones[Cliente]
end

#has?(clave) ⇒ verdadero | falso

Consulta la presencia de una variable nombrada en el almacenamiento local del hilo.

Parámetros:

  • llave (String | Símbolo)

    el nombre de la variable a query.

Devuelve:

  • (true | false)

    si la variable dada está presente o no.



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
Archivo 'lib/mongoid/threaded.rb', línea 93

def ¿tiene?(llave)
  # Aquí tenemos un ejemplo clásico de JRuby que no se comporta como MRI. En
  # MRI, si establece una variable de hilo en nula, la elimina de la lista
  # y las siguientes llamadas a thread_variable?(clave) devolverán falso. No
  # así que con JRuby. Una vez configurada, no se puede desactivar la variable de hilo.
  #
  # Sin embargo, dado que se supone que establecer una variable en nil es para removerla,
  # podemos asumir que una variable con valor nulo realmente no existe.

  # Entonces, en lugar de esto:
  # Thread.current.thread_variable?(key)

  #Tenemos que hacer esto:
  !Obtener(llave).nil?
end

#modified_documentsHash<Mongo::Session, Set<Mongoid::Document>>

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 almacén de hilos de documentos modificados.

Devuelve:

  • (Hash<Mongo::Session, Set>)

    Los documentos modificados indexados por sesión.



493
494
495
Archivo 'lib/mongoid/threaded.rb', línea 493

def modified_documents
  Obtener(MODIFIED_DOCUMENTS_KEY) { Picadillo.Nuevo { |h, k| h[k] = Configura.Nuevo } }
end

#sesionesHash<Integer, Set>

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 almacén de subprocesos de las sesiones.

Devuelve:

  • (Hash<Entero, Set>)

    Las sesiones indexadas por el ID del objeto del cliente.



483
484
485
Archivo 'lib/mongoid/threaded.rb', línea 483

def Sesiones
  Obtener(SESSIONS_KEY) { {}.comparar_por_identidad }
end

#establecer(clave, valor) ⇒ Objeto

Establece una variable local de hilo con el nombre dado y el valor dado. Consulte #get para una discusión sobre por qué este método es necesario y por qué debe evitarse Thread#[]= en funciones de retorno en cascada sobre insertos embebidos.

Parámetros:

  • llave (String | Símbolo)

    el nombre de la variable a establecer.

  • Valor (Objeto | nil)

    el valor de la variable a establecer (o 'nil' si desea anular el valor de la variable)



77
78
79
Archivo 'lib/mongoid/threaded.rb', línea 77

def conjunto(llave, Valor)
  Hilo.Actual.thread_variable_set(llave, Valor)
end

#set_current_scope(alcance, clase) ⇒ Criterios

Establezca el alcance actual de Mongoid. Seguro para el encadenamiento de alcances multimodales.

Ejemplos:

Establece el alcance.

Threaded.current_scope(scope, klass)

Parámetros:

  • Alcance (Criterios)

    El alcance actual.

  • klass (Clase) -

    La clase de modelo actual.

Devuelve:



305
306
307
308
309
310
311
312
Archivo 'lib/mongoid/threaded.rb', línea 305

def set_current_scope(Alcance, klass)
  si Alcance.nil?
    alcance actual no establecido(klass)
  else
    current_scope = Obtener(CURRENT_SCOPE_KEY) { {} }
    current_scope[klass] = Alcance
  end
end

#set_session(sesión, client: nil) ⇒ Object

Nota:

Por compatibilidad con versiones anteriores está permitido llamar a este método sin

Almacena en caché una sesión para este hilo para un cliente.

especificando el parámetro 'cliente'.

Parámetros:

  • sesión (Mongo::Session)

    La sesión a guardar.

  • Cliente (Mongo::Cliente | nulo) (predeterminado: nulo)

    El cliente para almacenar en caché la sesión.



401
402
403
Archivo 'lib/mongoid/threaded.rb', línea 401

def set_session(sesión, cliente: nulo)
  Sesiones[Cliente] = sesión
end

#pila(nombre_obtenido) ⇒ arreglo

Obtenga la pila nombrada.

Ejemplos:

Obtener una pila por nombre

Threaded.stack(:create)

Parámetros:

  • Nombre (Símbolo)

    El nombre de la pila

Devuelve:

  • (arreglo)

    La pila.



175
176
177
Archivo 'lib/mongoid/threaded.rb', línea 175

def stack(Nombre)
  Obtener(STACK_KEYS[Nombre]) { [] }
end

#¿validado?(document) ⇒ true | false

¿El documento está validado en el hilo actual?

Ejemplos:

¿El documento está validado?

Threaded.validated?(doc)

Parámetros:

  • Documento (documento)

    El documento a comprobar.

Devuelve:

  • (true | false)

    Si el documento está validado.



346
347
348
Archivo 'lib/mongoid/threaded.rb', línea 346

def ¿validado?(Documento)
  validaciones_para(Documento.clase).incluir?(Documento._id)
end

#validationsHash

Obtenga todas las validaciones en el hilo actual.

Ejemplos:

Obtenga todas las validaciones.

Threaded.validations

Devuelve:

  • (encriptada)

    Las validaciones actuales.



366
367
368
Archivo 'lib/mongoid/threaded.rb', línea 366

def validación
  Obtener(VALIDATIONS_KEY) { {} }
end

#validations_for(klass) ⇒ Array

Obtenga todas las validaciones en el hilo actual para la clase.

Ejemplos:

Obtenga todas las validaciones.

Threaded.validations_for(Person)

Parámetros:

  • klass (Clase) -

    La clase para comprobar.

Devuelve:

  • (arreglo)

    Las validaciones actuales.



390
391
392
Archivo 'lib/mongoid/threaded.rb', línea 390

def validaciones_para(klass)
  validación[klass] ||= []
end

#without_default_scope?(klass) ⇒ Booleano

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

¿Se suprime el alcance predeterminado de la clase dada en el hilo actual?

Ejemplos:

¿Se suprimió el alcance por defecto de la clase dada?

Threaded.without_default_scope?(klass)

Parámetros:

  • klass (Clase) -

    El modelo para comprobar la supresión del alcance por defecto.

Devuelve:



322
323
324
Archivo 'lib/mongoid/threaded.rb', línea 322

def sin_ámbito_predeterminado?(klass)
  stack(:without_default_scope).incluir?(klass)
end