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
-
#add_modified_document(session, document) ⇒ Object
Almacene una referencia al documento que se modificó dentro de una transacción asociada con la sesión.
-
#¿guardado automáticamente?(documento) ⇒ verdadero | falso
¿El documento se guarda automáticamente en el hilo actual?
-
#autosaves ⇒ Hash
Obtener todos los guardados automáticos en el hilo actual.
-
#autosaves_for(klass) ⇒ Array
Obtener todos los guardados automáticos en el hilo actual para la clase.
-
#begin_autosave(document) ⇒ Object
Comience a guardar automáticamente un documento en el hilo actual.
-
#begin_execution(nombre) ⇒ verdadero
Iniciar la entrada en una pila local de un hilo nombrado.
-
#begin_validate(documento) ⇒ Objeto
Comenzar a validar un documento en el hilo actual.
-
#begin_without_default_scope(clase) ⇒ Objeto
privada
Comience a suprimir los alcances predeterminados para el modelo determinado en el hilo actual.
-
#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.
-
#clear_session(client: nil) ⇒ nil
Borrar la sesión almacenada en caché de este hilo para un cliente.
-
#client_override ⇒ Cadena | Símbolo
Obtenga la anulación del cliente global.
-
#client_override=(nombre) ⇒ Cadena | Símbolo
Establecer la anulación del cliente global.
-
#current_scope(klass = nil) ⇒ Criterios
Obtener el ámbito Mongoid actual.
-
#current_scope=(scope) ⇒ Criterio
Establecer el alcance actual de Mongoid.
-
#database_override ⇒ String | Symbol
Obtenga la anulación de la base de datos global.
-
#database_override=(nombre) ⇒ Cadena | Símbolo
Establecer la anulación de la base de datos global.
-
#eliminar(tecla) ⇒ Objeto
Elimina la variable nombrada del almacenamiento local del hilo.
-
#execute_callbacks=(bandera) ⇒ Objeto
Indica si las devoluciones de llamadas de documentos deben invocarse de forma predeterminada para el hilo actual.
-
#ejecutar_devoluciones_de_llamadas? ⇒ verdadero | falso
Consulta si las devoluciones de llamadas de documentos deben ejecutarse de forma predeterminada para el hilo actual.
-
#¿ejecutando?(nombre) ⇒ verdadero
Están en medio de la ejecución de la pila nombrada.
-
#exit_autosave(documento) ⇒ Objeto
Salir del guardado automático de un documento en el hilo actual.
-
#exit_execution(nombre) ⇒ verdadero
Salir de una pila local de threads con nombre.
-
#exit_validate(documento) ⇒ Objeto
Salir de la validación de un documento en el hilo actual.
-
#salida_sin_alcance_predeterminado(clase) ⇒ Objeto
privada
Salir suprimiendo los alcances predeterminados para el modelo dado en el hilo actual.
-
#get(key, &default) ⇒ objeto | nil
Consulta la variable local del hilo con el nombre dado.
-
#get_session(client: nil) ⇒ Mongo::Session | nil
Obtenga la sesión almacenada en caché para este hilo para un cliente.
-
#tiene?(clave) ⇒ verdadero | falso
Consulta la presencia de una variable nombrada en el almacenamiento local del hilo.
-
#documentos_modificados ⇒ Hash<Mongo::Sesión, Set<Mongoid::Document>>
privada
Devuelve el almacén de subprocesos de los documentos modificados.
-
#sesiones ⇒ Hash<Entero, Conjunto>
privada
Devuelve el almacén de subprocesos de las sesiones.
-
#establecer(clave, valor) ⇒ Objeto
Establece una variable local del hilo con el nombre dado en el valor dado.
-
#set_current_scope(alcance, clase) ⇒ Criterios
Establecer el alcance actual de Mongoid.
-
#set_session(sesión, cliente: nil) ⇒ Objeto
Almacenar en caché una sesión para este hilo para un cliente.
-
#pila(nombre) ⇒ Matriz
Obtener la pila nombrada.
-
#validado?(documento) ⇒ verdadero | falso
¿Está validado el documento en el hilo actual?
-
#validations ⇒ Hash
Obtener todas las validaciones en el hilo actual.
-
#validations_for(klass) ⇒ Array
Obtenga todas las validaciones en el hilo actual para la clase.
-
#sin_alcance_predeterminado?(clase) ⇒ Booleano
privada
¿Se suprime el alcance predeterminado de la clase dada en el hilo actual?
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.
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?
334 335 336 |
# Archivo 'lib/mongoid/threaded.rb', línea 334 def ¿guardado automáticamente?(Documento) autosaves_para(Documento.clase).¿incluir?(Documento._id) end |
#autosaves ⇒ Hash
Obtener todos los guardados automáticos en el hilo actual.
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.
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.
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.
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.
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.
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.
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
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'.
425 426 427 |
# Archivo 'lib/mongoid/threaded.rb', línea 425 def clear_session(cliente: nulo) Sesiones.borrar(Cliente)&.fin_sesión end |
#client_override ⇒ Cadena | Símbolo
Obtenga la anulación del cliente global.
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.
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.
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.
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_override ⇒ String | Symbol
Obtenga la anulación de la base de datos global.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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
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'.
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.
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_modificados ⇒ Hash<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.
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 |
#sesiones ⇒ Hash<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.
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.
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.
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
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'.
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.
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?
346 347 348 |
# Archivo 'lib/mongoid/threaded.rb', línea 346 def ¿validado?(Documento) validaciones_para(Documento.clase).¿incluir?(Documento._id) end |
#validations ⇒ Hash
Obtener todas las validaciones en el hilo actual.
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.
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?
322 323 324 |
# Archivo 'lib/mongoid/threaded.rb', línea 322 def ¿sin_alcance_predeterminado?(klass) stack(:sin_alcance_predeterminado).¿incluir?(klass) end |