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 en el espacio de nombres

Modules: Ciclo vital

Colapso delresumen constante

DATABASE_OVERRIDE_KEY =
'[mongoid]:anulación de base de datos'
CLAVE_CLAVE_CLIENTES =

Constante para la clave para almacenar clientes.

'[mongoid]:clientes'
CLAVE_DE_ANULACIÓN_DEL_CLIENTE =

La clave para anular el cliente.

'[mongoid]:anulación del cliente'
CLAVE_DE_ALCANCE_ACTUAL =

La clave para la pila de alcance del hilo actual.

'[mongoid]:ámbito actual'
CLAVE DE AUTOGUARDADO =
'[mongoid]:guardados automáticos'
CLAVE_VALIDACIONES =
'[mongoid]:validaciones'
PILA_LLAVES =
Picadillo.Nuevo hacer |hash, clave|
  hash[clave] = "[mongoid]:#{clave}-stack"
end
CLAVE DE SESIONES =

La clave para las sesiones del hilo actual.

'[mongoid]:sesiones'
CLAVE DE DOCUMENTOS MODIFICADOS =

La clave para almacenar documentos modificados dentro de las transacciones.

'[mongoid]:documentos modificados'
EJECUTAR_RETROLLAMADAS =

La clave que almacena el valor predeterminado que determina si se ejecutan o no devoluciones de llamadas en los documentos.

'[mongoid]:ejecutar-devoluciones-de-llamadas'
BIND =
'bind'.freeze
ASIGNAR =
'asignar'.freeze
CONSTRUIR =
'construir '.freeze
CARGA =
'load'.freeze
CREAR =
'crear '.freeze

Colapso del resumen del método de instancia

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::Sesión)

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

  • Documento (Mongoid::Documento)

    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 no ser que sesión&.¿en_transacción?

  documentos modificados[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:

  • (verdadero | falso)

    Si el documento se guarda automáticamente.



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

def ¿guardado automáticamente?(Documento)
  autosaves_para(Documento.clase).¿incluir?(Documento._id)
end

#autosavesHash

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

Ejemplos:

Obtener todos los guardados automáticos.

Threaded.autosaves

Devuelve:

  • (Hash)

    Los guardados automáticos actuales.



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

def guardados automáticos
  Obtener(CLAVE DE GUARDADO AUTOMÁTICO) { {} }
end

#autosaves_for(klass) ⇒ Array

Obtener todos los guardados automáticos en el hilo actual para la clase.

Ejemplos:

Obtener todos los guardados automáticos.

Threaded.autosaves_for(Person)

Parámetros:

  • klass (Clase) -

    La clase a comprobar.

Devuelve:

  • (Matriz)

    Los guardados automáticos actuales.



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

def autosaves_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 a guardar automáticamente.



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

def begin_autosave(Documento)
  autosaves_para(Documento.clase).Push(Documento._id)
end

#begin_execution(nombre) ⇒ verdadero

Iniciar la entrada en una pila local de un hilo nombrado.

Ejemplos:

Comenzar la entrada a la pila.

Threaded.begin_execution(:create)

Parámetros:

  • Nombre (Cadena) -

    El nombre de la pila

Devuelve:

  • (verdadero) -

    Verdadero.



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

def inicio_ejecución(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 comenzar_validar(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 predeterminados para el modelo determinado en el hilo actual.

Ejemplos:

Comience sin la pila de alcance predeterminada.

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(:sin_alcance_predeterminado).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 de la limpieza.

Parámetros:

  • sesión (Mongo::Sesión)

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

Devuelve:

  • (Conjunto)

    Recopilación de documentos modificados antes de su autorización.



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

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

#clear_session(client: nil) ⇒ nil

Nota:

Para compatibilidad con versiones anteriores, se permite llamar a este método sin

Borrar 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 el cual se borrará la sesión.

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_overrideCadena | Símbolo

Obtenga la anulación del cliente global.

Ejemplos:

Obtenga la anulación del cliente global.

Threaded.client_override

Devuelve:

  • (Cadena | Símbolo)

    La anulación.



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

def anulación del cliente
  Obtener(CLAVE DE ANULACIÓN DEL CLIENTE)
end

#client_override=(nombre) ⇒ Cadena | Símbolo

Establecer la anulación del cliente global.

Ejemplos:

Establecer la anulación del cliente global.

Threaded.client_override = :testing

Parámetros:

  • Nombre (Cadena | Símbolo)

    El nombre de anulación global.

Devuelve:

  • (Cadena | Símbolo)

    La anulación.



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

def anulación del cliente=(Nombre)
  conjunto(CLAVE DE ANULACIÓN DEL CLIENTE, Nombre)
end

#current_scope(klass = nil) ⇒ Criterios

Obtener el ámbito Mongoid actual.

Ejemplos:

Consigue el alcance.

Threaded.current_scope(klass)
Threaded.current_scope

Parámetros:

  • klass (Klass) (predeterminado: nulo)

    El tipo de clase del ámbito.

Devuelve:



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

def alcance actual(klass = nulo)
  alcance actual = Obtener(CLAVE DE ALCANCE ACTUAL)

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

#current_scope=(alcance) ⇒ Criterios

Establecer el alcance actual de Mongoid.

Ejemplos:

Establecer el alcance.

Threaded.current_scope = scope

Parámetros:

  • ámbito de aplicación (Criterios) -

    El alcance actual.

Devuelve:



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

def alcance_actual=(ámbito de aplicación)
  conjunto(CLAVE DE ALCANCE ACTUAL, ámbito de aplicación)
end

#database_overrideString | Symbol

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

Ejemplos:

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

Threaded.database_override

Devuelve:

  • (Cadena | Símbolo)

    La anulación.



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

def database_override
  Obtener(DATABASE_OVERRIDE_KEY)
end

#database_override=(nombre) ⇒ Cadena | Símbolo

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 (Cadena | Símbolo)

    El nombre de anulación global.

Devuelve:

  • (Cadena | Símbolo)

    La anulación.



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

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

#eliminar(tecla) ⇒ Objeto

Elimina la variable nombrada del almacenamiento local del hilo.

Parámetros:

  • clave (Cadena | Símbolo)

    el nombre de la variable a eliminar.



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

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

#execute_callbacks=(bandera) ⇒ Objeto

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 (verdadero | falso)

    Si las devoluciones de llamadas de documentos deben ejecutarse o no de forma predeterminada.



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

def ejecutar_devoluciones_de_llamadas=(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 (mediante #execute_callbacks=), esto devolverá verdadero.

Devuelve:

  • (verdadero | falso)

    Si las devoluciones de llamadas de documentos deben ejecutarse o no de forma predeterminada.



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

def ¿ejecutar_devoluciones de llamada?
  Si ¿tiene?(EJECUTAR_LLAMADAS)
    Obtener(EJECUTAR_LLAMADAS)
  else
    true
  end
end

#¿ejecutando?(nombre) ⇒ verdadero

Están en 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:

  • (verdadero) -

    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 del guardado automático de un documento en el hilo actual.

Ejemplos:

Salir del guardado automático.

Threaded.exit_autosave(doc)

Parámetros:

  • Documento (Documento) -

    El documento a guardar automáticamente.



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

def exit_autosave(Documento)
  autosaves_para(Documento.clase).delete_one(Documento._id)
end

#exit_execution(nombre) ⇒ verdadero

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:

  • (verdadero) -

    Verdadero.



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

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

#exit_validate(documento) ⇒ 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

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

Salir suprimiendo los alcances predeterminados para el modelo dado en el hilo actual.

Ejemplos:

Salir sin la pila de alcance predeterminada.

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(:sin_alcance_predeterminado).borrar(klass)
end

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

Consulta la variable local del hilo con el nombre especificado. Si se proporciona un bloque y la variable no existe, el valor de retorno 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 llamadas afectadas son devoluciones de llamadas en cascada en elementos secundarios integrados.

Parámetros:

  • clave (Cadena | Símbolo)

    el nombre de la variable a consultar

  • predeterminado (Procedimiento)

    un bloque opcional que debe devolver el valor predeterminado (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(clave, Ypredeterminado)
  resultado = Hilo.actual.thread_variable_get(clave)

  Si resultado.nil? && predeterminado
    resultado = rendimiento
    conjunto(clave, resultado)
  end

  resultado
end

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

Nota:

Para compatibilidad con versiones anteriores, se permite llamar a este método sin

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

especificando el parámetro 'cliente'.

Parámetros:

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

    El cliente para el cual se almacenará en caché la sesión.

Devuelve:

  • (Mongo::Sesión | nulo)

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



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

def obtener_sesión(cliente: nulo)
  Sesiones[Cliente]
end

#tiene?(clave) ⇒ verdadero | falso

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

Parámetros:

  • clave (Cadena | Símbolo)

    el nombre de la variable a consultar.

Devuelve:

  • (verdadero | falso)

    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?(clave)
  # Aquí tenemos un ejemplo clásico de JRuby que no se comporta como una resonancia magnética. En
  # MRI, si establece una variable de hilo en nula, la elimina de la lista
  # y las llamadas subsiguientes a thread_variable?(key) devolverán falso. No
  # así que con JRuby. Una vez configurada, no se puede desactivar la variable de hilo.
  #
  # Sin embargo, dado que establecer una variable en nulo supone eliminarla,
  #podemos asumir que una variable con valor nulo en realidad no existe.

  # Entonces, en lugar de esto:
  # Hilo.current.thread_variable?(clave)

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

#documentos_modificadosHash<Mongo::Sesión, Conjunto>

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 los 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 documentos modificados
  Obtener(CLAVE DE DOCUMENTOS MODIFICADOS) { Picadillo.Nuevo { |h, k| h[k] = Configura.Nuevo } }
end

#sesionesHash<Entero, Conjunto>

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 ID de objeto de cliente.



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

def Sesiones
  Obtener(CLAVE DE SESIONES) { {}.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:

  • clave (Cadena | 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(clave, valor)
  Hilo.actual.conjunto de variables de hilo(clave, valor)
end

#set_current_scope(alcance, clase) ⇒ Criterios

Establece el alcance actual de Mongoid. Compatible con encadenamiento de alcances multimodelo.

Ejemplos:

Establecer el alcance.

Threaded.current_scope(scope, klass)

Parámetros:

  • ámbito de aplicación (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 establecer_alcance_actual(ámbito de aplicación, klass)
  Si ámbito de aplicación.nil?
    alcance actual no establecido(klass)
  else
    alcance actual = Obtener(CLAVE DE ALCANCE ACTUAL) { {} }
    alcance actual[klass] = ámbito de aplicación
  end
end

#set_session(sesión, cliente: nil) ⇒ Objeto

Nota:

Para compatibilidad con versiones anteriores, se permite llamar a este método sin

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

especificando el parámetro 'cliente'.

Parámetros:

  • sesión (Mongo::Sesión)

    La sesión a guardar.

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

    El cliente para el cual se 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) ⇒ Matriz

Obtener la pila nombrada.

Ejemplos:

Obtener una pila por nombre

Threaded.stack(:create)

Parámetros:

  • Nombre ( Símbolo) -

    El nombre de la pila

Devuelve:

  • (Matriz)

    La pila.



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

def stack(Nombre)
  Obtener(PILA_LLAVES[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:

  • (verdadero | falso)

    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

Obtener todas las validaciones en el hilo actual.

Ejemplos:

Obtenga todas las validaciones.

Threaded.validations

Devuelve:

  • (Hash)

    Las validaciones actuales.



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

def validaciones
  Obtener(CLAVE DE VALIDACIONES) { {} }
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 a comprobar.

Devuelve:

  • (Matriz)

    Las validaciones actuales.



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

def validaciones_para(klass)
  validaciones[klass] ||= []
end

#sin_alcance_predeterminado?(clase) ⇒ 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 suprime el alcance predeterminado de la clase dada?

Threaded.without_default_scope?(klass)

Parámetros:

  • klass (Clase) -

    El modelo para verificar la supresión del alcance predeterminado.

Devuelve:



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

def ¿sin_alcance_predeterminado?(klass)
  stack(:sin_alcance_predeterminado).¿incluir?(klass)
end