Módulo: Mongoid::Threaded
- Ampliado por:
- Con hilo
- Incluido en:
- Con hilo
- Definido en:
- lib/mongoid/threaded.rb,
lib/mongoid/threaded/lifecycle.rb
Overview
Este módulo contiene lógica para facilitar el acceso a objetos que tengan un ciclo de vida en el hilo actual.
Definido bajo Namespace
Modules: Ciclo de vida
Resumen de constantes colapsar
- STORAGE_KEY =
La clave del almacenamiento compartido a nivel de hilo y fibra. Debe ser un símbolo porque las claves para el almacenamiento local de fibra deben ser símbolos.
':[mongoid]'- STORAGE_OWNER_KEY =
Rastrea qué fibra es la propietaria del hash de almacenamiento, para detectar cuando una fibra ha heredado (en lugar de creado) su almacenamiento de una fibra superior.
':'[mongoid]:owner'- DATABASE_OVERRIDE_KEY =
'anulación-db'- CLIENT_OVERRIDE_KEY =
La clave para anular el cliente.
'sobrescritura de cliente'- CURRENT_SCOPE_KEY =
La clave para la pila de ámbito del hilo actual.
'álcance actual'- AUTOSAVES_KEY =
'guardados automáticos'- VALIDATIONS_KEY =
'validación'- TOUCH_MERGED_KEY =
'toque fusionado'- STACK_KEY ==
encriptada.Nuevo hacer |hash, llave| hash[llave] = "#{clave}-pila" end
- SESSIONS_KEY =
La clave para las sesiones del hilo actual.
'Sesiones'- MODIFICADO_DOCUMENTOS_KEY =
La clave para almacenar documentos modificados en transacciones.
'document-modificados'- EJECUTAR_CALLBACKS =
La clave que almacena el valor por defecto para indicar si se ejecutan o no las funciones de retorno en los documentos.
'ejecutar-callbacks'- BIND =
'bind'- ASIGNAR =
'asignar'- compilar =
'compilar'- LOAD =
'cargar'- CREAR =
'Cree'
Resumen del método de instancia colapsar
-
#add_modified_document(session, document) ⇒ Object
Almacene una referencia al documento que se modificó dentro de una transacción asociada con la sesión.
-
#¿auto guardado?(documento) ⇒ true | false
¿El documento se guarda automáticamente en el hilo actual?.
-
#autosaves ⇒ Hash
Obtener todas los guardados automáticos en el hilo actual.
-
#autosaves_for(klass) ⇒ Array
Obtén todas las autoguardadas en la conversación actual para la clase.
-
#begin_autosave(document) ⇒ Object
Comienza a guardar automáticamente un documento en el hilo actual.
-
#begin_execution(nombre) ⇒ verdadero
Comience la entrada en una pila local de hilos con nombre.
-
#begin_touch_merged(document) ⇒ Objeto
Marcar que las actualizaciones táctiles de un document se han fusionado en una inserción atómica en el hilo actual.
-
#begin_validate(documento) ⇒ Objeto
Inicia la validación de un documento en el hilo actual.
-
#inicio_sin_ámbito_predeterminado(clasificación) ⇒ Objeto
privado
Comience a suprimir los alcances por defecto para el modelo dado 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 del borrado.
-
#clear_session(client: nil) ⇒ nil
Borre la sesión almacenada en caché de este hilo para un cliente.
-
#client_override ⇒ String | Symbol
Obtén la invalidación global del cliente.
-
#client_override=(name) ⇒ String | Symbol
Establece la anulación global del cliente.
-
#current_scope(klass = nil) ⇒ Criterios
Obtén el alcance actual de Mongoid.
-
#current_scope=(scope) ⇒ Criterio
Establece el alcance actual de Mongoid.
-
#database_override ⇒ String | Symbol
Obtén la anulación global de la base de datos.
-
#database_override=(name) ⇒ String | Symbol
Configure la anulación global de la base de datos.
-
#delete(key) ⇒ Objeto
Elimina la variable nombrada del almacenamiento local.
-
#execute_callbacks=(flag) ⇒ Objeto
Indica si las devoluciones de llamada de documentos deben ser invocadas por defecto para el hilo actual.
-
#execute_callbacks? ⇒ true | false
Consulta si las devoluciones de llamada de documentos deben ejecutarse por defecto para el hilo actual.
-
#executing?(name) ⇒ true
Están en medio de ejecutar la pila nombrada.
-
#exit_autosave(documento) ⇒ Objeto
Salir guardando automáticamente un documento en el hilo actual.
-
#exit_execution(name) ⇒ true
Salir de una pila local de threads con nombre.
-
#exit_touch_merged(document) ⇒ Objeto
Borrar la marca de combinación tocar para un document en el hilo actual.
-
#exit_validate(documento) ⇒ Objeto
Salir de la validación de un documento en el hilo actual.
-
#exit_without_default_scope(klass) ⇒ Object
privado
Salir suprimiendo los ámbitos por defecto para el modelo dado en el hilo actual.
-
#get(key, &default) ⇒ objeto | nil
Consulta la variable local de hilo o fibra con el nombre proporcionado.
-
#get_session(client: nil) ⇒ Mongo::Session | nil
Obtén la sesión en caché para este hilo para un cliente.
-
#has?(key) ⇒ true | false
Consulta la existencia de una variable con nombre en el almacenamiento local.
-
#modified_documents ⇒ Hash<Mongo::Session, Set<Mongoid::Document>>
privado
Devuelve el almacén de hilos de documentos modificados.
-
#reset! ⇒ Objeto
Restablece el almacenamiento local de subprocesos o fibras actual a su estado inicial.
-
#sesiones ⇒ Hash<Entero, Conjunto>
privado
Devuelve el almacenamiento de hilos de sesiones.
-
#definir(clave, valor) ⇒ Object
Establece una variable en el almacenamiento local con el nombre dado al valor dado.
-
#set_current_scope(scope, klass) ⇒ Criterio
Establece el alcance actual de Mongoid.
-
#set_session(session, client: nil) ⇒ Objeto
Almacena en caché una sesión para este hilo para un cliente.
-
#pila(name) ⇒ arreglo
Obtenga la pila nombrada.
-
#touch_merged ⇒ Hash
GET todo el seguimiento sincronizado en el hilo actual.
-
#touch_merged?(document) ⇒ true | false
¿Se ha marcado el document como si sus actualizaciones táctiles se hubieran fusionado en una inserción atómica?
-
#touch_merged_for(klass) ⇒ Array
Obtener todos los identificadores de document fusionados por toque en el hilo actual para la clase.
-
#¿validado?(documento) ⇒ verdadero | falso
¿Está validado el documento en el hilo actual?.
-
#validations ⇒ Hash
Obtenga todas las validaciones en el hilo actual.
-
#validations_for(klass) ⇒ Array
Obtenga todas las validaciones en el hilo actual para la clase.
-
#without_default_scope?(klass) ⇒ Booleano
privado
¿Está suprimido el alcance por defecto 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.
504 505 506 507 508 |
Archivo 'lib/mongoid/threaded.rb', línea 504 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?
368 369 370 |
Archivo 'lib/mongoid/threaded.rb', línea 368 def ¿guardado automáticamente?(Documento) guardados automáticos para(Documento.clase).incluir?(Documento._id) end |
#autosaves ⇒ Hash
Obtener todas los guardados automáticos en el hilo actual.
403 404 405 |
Archivo 'lib/mongoid/threaded.rb', línea 403 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.
425 426 427 |
Archivo 'lib/mongoid/threaded.rb', línea 425 def guardados automáticos para(klass) guardados automáticos[klass] ||= [] end |
#begin_autosave(document) ⇒ Object
Comienza a guardar automáticamente un documento en el hilo actual.
198 199 200 |
Archivo 'lib/mongoid/threaded.rb', línea 198 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.
130 131 132 |
Archivo 'lib/mongoid/threaded.rb', línea 130 def begin_execution(Nombre) stack(Nombre).push(true) end |
#begin_touch_merged(document) ⇒ Objeto
Marcar que las actualizaciones táctiles de un document se han fusionado en una inserción atómica en el hilo actual.
219 220 221 |
Archivo 'lib/mongoid/threaded.rb', línea 219 def begin_touch_merged(Documento) un toque combinado para(Documento.clase).push(Documento._id) end |
#begin_validate(document) ⇒ Objeto
Inicia la validación de un documento en el hilo actual.
208 209 210 |
Archivo 'lib/mongoid/threaded.rb', línea 208 def begin_validate(Documento) validaciones_para(Documento.clase).push(Documento._id) end |
#begin_without_default_scope(klass) ⇒ Objeto
Este método es parte de una API privada. Se debe evitar el uso de este método 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.
261 262 263 |
Archivo 'lib/mongoid/threaded.rb', línea 261 def begin_without_default_scope(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.
517 518 519 |
Archivo 'lib/mongoid/threaded.rb', línea 517 def clear_modified_documents(sesión) modified_documents.borrar(sesión) || [] end |
#clear_session(client: nil) ⇒ nil
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 client.
494 495 496 |
Archivo 'lib/mongoid/threaded.rb', línea 494 def clear_session(cliente: nulo) Sesiones.borrar(Cliente)&.end_session end |
#client_override ⇒ String | Symbol
Obtén la invalidación global del cliente.
283 284 285 |
Archivo 'lib/mongoid/threaded.rb', línea 283 def client_override Obtener(CLIENT_OVERRIDE_KEY) end |
#client_override=(nombre) ⇒ String | Symbol
Establece la anulación global del cliente.
295 296 297 |
Archivo 'lib/mongoid/threaded.rb', línea 295 def client_override=(Nombre) Configura(CLIENT_OVERRIDE_KEY, Nombre) end |
#current_scope(klass = nil) ⇒ Criteria
Obtén el alcance actual de Mongoid.
308 309 310 311 312 313 314 315 316 |
Archivo 'lib/mongoid/threaded.rb', línea 308 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
Establece el alcance actual de Mongoid.
326 327 328 |
Archivo 'lib/mongoid/threaded.rb', línea 326 def current_scope=(Alcance) Configura(CURRENT_SCOPE_KEY, Alcance) end |
#database_override ⇒ String | Symbol
Obtén la anulación global de la base de datos.
140 141 142 |
Archivo 'lib/mongoid/threaded.rb', línea 140 def database_override Obtener(DATABASE_OVERRIDE_KEY) end |
#database_override=(nombre) ⇒ String | Symbol
Configure la anulación global de la base de datos.
152 153 154 |
Archivo 'lib/mongoid/threaded.rb', línea 152 def database_override=(Nombre) Configura(DATABASE_OVERRIDE_KEY, Nombre) end |
#borrar(key) ⇒ objeto
Elimina la variable nombrada del almacenamiento local.
109 110 111 |
Archivo 'lib/mongoid/threaded.rb', línea 109 def borrar(llave) Almacenamiento.borrar(llave) end |
#execute_callbacks=(flag) ⇒ Object
Indica si las devoluciones de llamada de documentos deben invocarse por defecto para el thread actual. Los documentos individuales pueden anular aún más el comportamiento de la función de retorno, pero esto se utilizará como el comportamiento por defecto.
543 544 545 |
Archivo 'lib/mongoid/threaded.rb', línea 543 def execute_callbacks=(flag) Configura(EXECUTE_CALLBACKS, flag) end |
#execute_callbacks? ⇒ true | false
Consulta si las devoluciones de llamada de documentos deben ejecutarse por defecto para el hilo actual.
A menos que se indique lo contrario (con #execute_callbacks=), esto retornará verdadero.
529 530 531 532 533 534 535 |
Archivo 'lib/mongoid/threaded.rb', línea 529 def ¿ejecutar_callbacks? si ¿tiene?(EXECUTE_CALLBACKS) Obtener(EXECUTE_CALLBACKS) else true end end |
#¿En ejecución?(nombre) ⇒ true
Están en el medio de la ejecución de la pila nombrada
164 165 166 |
Archivo 'lib/mongoid/threaded.rb', línea 164 def ejecutando?(Nombre) !stack(Nombre).¿vacío? end |
#exit_autosave(documento) ⇒ Objeto
Salir guardando automáticamente un documento en el hilo actual.
229 230 231 |
Archivo 'lib/mongoid/threaded.rb', línea 229 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.
176 177 178 |
Archivo 'lib/mongoid/threaded.rb', línea 176 def exit_execution(Nombre) stack(Nombre).pop end |
#exit_touch_merged(document) ⇒ objeto
Borrar la marca de combinación tocar para un document en el hilo actual.
249 250 251 |
Archivo 'lib/mongoid/threaded.rb', línea 249 def salida_tacto_fusionado(Documento) un toque combinado para(Documento.clase).delete_one(Documento._id) end |
#exit_validate(document) ⇒ Objeto
Salir de la validación de un documento en el hilo actual.
239 240 241 |
Archivo 'lib/mongoid/threaded.rb', línea 239 def exit_validate(Documento) validaciones_para(Documento.clase).delete_one(Documento._id) end |
#exit_without_default_scope(klass) ⇒ Objeto
Este método es parte de una API privada. Se debe evitar el uso de este método 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.
273 274 275 |
Archivo 'lib/mongoid/threaded.rb', línea 273 def salir_sin_ámbito_predeterminado(klass) stack(:without_default_scope).borrar(klass) end |
#get(key, &default) ⇒ Object | nil
Consulta la variable local de hilo o fibra con el nombre dado. Si se proporciona un bloque y la variable aún no existe, el valor de retorno del bloque se establecerá como el valor de la variable antes de devolverlo.
Es muy importante que las aplicaciones (y especialmente Mongoid) utilicen este método en lugar de Thread#[], ya que Thread#[] está en realidad destinado a variables locales de fibra, y Mongoid utiliza Fibers como detalle de implementación en algunos callbacks. Poner el estado local del hilo en un almacén local de fibra dará lugar a que el estado sea invisible cuando se ejecuten los callbacks relevantes en una fibra diferente.
Las devoluciones de llamada afectadas son devoluciones de llamada en cascada sobre hijos incorporados.
84 85 86 87 88 89 90 91 92 93 |
Archivo 'lib/mongoid/threaded.rb', línea 84 def Obtener(llave, &predeterminado) Resultado = Almacenamiento[llave] si Resultado.nil? && predeterminado Resultado = rendimiento Configura(llave, Resultado) end Resultado end |
#get_session(client: nil) ⇒ Mongo::Session | nil
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 client.
482 483 484 |
Archivo 'lib/mongoid/threaded.rb', línea 482 def get_session(cliente: nulo) Sesiones[Cliente] end |
#has?(clave) ⇒ verdadero | falso
Consulta la existencia de una variable con nombre en el almacenamiento local.
118 119 120 |
Archivo 'lib/mongoid/threaded.rb', línea 118 def ¿tiene?(llave) Almacenamiento.key?(llave) end |
#modified_documents ⇒ Hash<Mongo::Session, Set<Mongoid::Document>>
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve el almacén de hilos de documentos modificados.
562 563 564 |
Archivo 'lib/mongoid/threaded.rb', línea 562 def modified_documents Obtener(MODIFIED_DOCUMENTS_KEY) { encriptada.Nuevo { |h, k| h[k] = Configura.Nuevo } } end |
#¡restablecer! ⇒ Objeto
Restablece el almacenamiento local actual de subproceso o fibra a su estado inicial. Esto es útil para asegurar que el estado esté limpio al iniciar un nuevo subproceso o fibra.
El valor de Mongoid::Config.real_isolation_level se utiliza para determinar si se debe restablecer el almacenamiento del hilo o fibra actual.
53 54 55 56 57 58 59 60 61 62 63 |
Archivo 'lib/mongoid/threaded.rb', línea 53 def reset! caso Config.real_isolation_level cuando hilo: Hilo.Actual.thread_variable_set(CLAVE_DE_ALMACENAMIENTO, nulo) cuando fibra Fiber[CLAVE_DE_ALMACENAMIENTO] = {} Fiber[STORAGE_OWNER_KEY] = Fiber.Actual.object_id else propagar "Nivel de aislamiento desconocido: #{Config.real_isolation_level.inspect}" end end |
#sesiones ⇒ Hash<Integer, Set>
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve el almacenamiento de hilos de sesiones.
552 553 554 |
Archivo 'lib/mongoid/threaded.rb', línea 552 def Sesiones Obtener(SESSIONS_KEY) { {}.comparar_por_identidad } end |
#set(key, value) ⇒ Object
Establece una variable en el almacenamiento local con el nombre dado al valor dado. Consulta #get para una discusión sobre por qué este método es necesario y por qué se debe evitar Thread#[]= en callbacks en cascada en hijos embebidos.
102 103 104 |
Archivo 'lib/mongoid/threaded.rb', línea 102 def Configura(llave, Valor) Almacenamiento[llave] = Valor end |
#set_current_scope(scope, klass) ⇒ Criterio
Establezca el alcance actual de Mongoid. Seguro para el encadenamiento de alcances multimodales.
339 340 341 342 343 344 345 346 |
Archivo 'lib/mongoid/threaded.rb', línea 339 def set_current_scope(Alcance, klass) si Alcance.nil? desconfigurar_ámbito_actual(klass) else current_scope = Obtener(CURRENT_SCOPE_KEY) { {} } current_scope[klass] = Alcance end end |
#set_session(sesión, client: nil) ⇒ Object
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 client.
470 471 472 |
Archivo 'lib/mongoid/threaded.rb', línea 470 def set_session(sesión, cliente: nulo) Sesiones[Cliente] = sesión end |
#pila(nombre_obtenido) ⇒ arreglo
Obtenga la pila nombrada.
188 189 190 |
Archivo 'lib/mongoid/threaded.rb', línea 188 def stack(Nombre) Obtener(STACK_KEYS[Nombre]) { [] } end |
#touch_merged ⇒ Hash
GET todo el seguimiento sincronizado en el hilo actual.
447 448 449 |
Archivo 'lib/mongoid/threaded.rb', línea 447 def táctil_unido Obtener(TOUCH_MERGED_KEY) { {} } end |
#touch_merged?(document) ⇒ true | false
¿Está el document marcado como si sus actualizaciones táctiles se hubieran fusionado en una inserción atómica?
393 394 395 |
Archivo 'lib/mongoid/threaded.rb', línea 393 def tocar_fusionado?(Documento) un toque combinado para(Documento.clase).incluir?(Documento._id) end |
#touch_merged_for(klass) ⇒ Array
Obtener todos los identificadores de document fusionados por toque en el hilo actual para la clase.
459 460 461 |
Archivo 'lib/mongoid/threaded.rb', línea 459 def un toque combinado para(klass) táctil_unido[klass] ||= [] end |
#¿validado?(document) ⇒ true | false
¿Está el documento validado en el hilo actual?
380 381 382 |
Archivo 'lib/mongoid/threaded.rb', línea 380 def ¿validado?(Documento) validaciones_para(Documento.clase).incluir?(Documento._id) end |
#validations ⇒ Hash
Obtenga todas las validaciones en el hilo actual.
413 414 415 |
Archivo 'lib/mongoid/threaded.rb', línea 413 def validación Obtener(VALIDATIONS_KEY) { {} } end |
#validations_for(klass) ⇒ Array
Obtenga todas las validaciones en el hilo actual para la clase.
437 438 439 |
Archivo 'lib/mongoid/threaded.rb', línea 437 def validaciones_para(klass) validación[klass] ||= [] end |
#without_default_scope?(klass) ⇒ Booleano
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
¿Está suprimido el ámbito por defecto de la clase dada en el hilo actual?
356 357 358 |
Archivo 'lib/mongoid/threaded.rb', línea 356 def sin_ámbito_predeterminado?(klass) stack(:without_default_scope).incluir?(klass) end |