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
-
#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
Comience 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_validate(documento) ⇒ Objeto
Comenzar a validar 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
Obtener el ámbito Mongoid actual.
-
#current_scope=(scope) ⇒ Criterio
Establecer el alcance actual de Mongoid.
-
#database_override ⇒ String | Symbol
Obtén la anulación global de la base de datos.
-
#database_override=(nombre) ⇒ Cadena | Símbolo
Establecer la anulación de la base de datos global.
-
#delete(key) ⇒ Objeto
Remueve la variable nombrada del almacenamiento local del hilo.
-
#execute_callbacks=(flag) ⇒ Objeto
Indica si las devoluciones de llamada de documentos deben ser invocadas por defecto 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 ejecutar la pila nombrada.
-
#exit_autosave(documento) ⇒ Objeto
Salir guardando automáticamente 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.
-
#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
Query la variable local del hilo con el nombre proporcionado.
-
#get_session(client: nil) ⇒ Mongo::Session | nil
Obtén la sesión 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>>
privado
Devuelve el almacén de hilos de documentos modificados.
-
#sesiones ⇒ Hash<Entero, Conjunto>
privado
Devuelve el almacén de subprocesos de las sesiones.
-
#definir(clave, valor) ⇒ Object
Establece una variable de hilo local con el nombre dado al valor dado.
-
#set_current_scope(alcance, clase) ⇒ Criterios
Establecer el alcance actual de Mongoid.
-
#set_session(sesión, cliente: nil) ⇒ Objeto
Almacena en caché una sesión para este hilo para un cliente.
-
#pila(name) ⇒ arreglo
Obtenga la pila nombrada.
-
#¿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
¿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 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?
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 |
#autosaves ⇒ Hash
Obtener todas 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_GUARDADO_AUTOMATICO) { {} } end |
#autosaves_for(klass) ⇒ Array
Obtén todas las autoguardadas en la conversación actual para la clase.
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.
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.
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.
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.
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.
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
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'.
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 ⇒ String | Symbol
Obtén la invalidación global del cliente.
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.
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.
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.
292 293 294 |
Archivo 'lib/mongoid/threaded.rb', línea 292 def alcance_actual=(Alcance) conjunto(CURRENT_SCOPE_KEY, Alcance) end |
#database_override ⇒ String | Symbol
Obtén la anulación global de la base de datos.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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
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'.
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.
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_documents ⇒ Hash<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.
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 |
#sesiones ⇒ Hash<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.
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.
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.
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
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'.
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.
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?
346 347 348 |
Archivo 'lib/mongoid/threaded.rb', línea 346 def ¿validado?(Documento) validaciones_para(Documento.clase).incluir?(Documento._id) end |
#validations ⇒ Hash
Obtenga todas las validaciones en el hilo actual.
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.
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?
322 323 324 |
Archivo 'lib/mongoid/threaded.rb', línea 322 def sin_ámbito_predeterminado?(klass) stack(:without_default_scope).incluir?(klass) end |