Módulo: Mongoid::Threaded
- Estendido por:
- Threaded
- Incluído em:
- Threaded
- Definido em:
- lib/mongoid/threaded.rb,
lib/mongoid/threaded/Lifecycle.rb mais...
Visão geral
Este módulo contém lógica para facilitar o acesso a objetos que têm um ciclo de vida no thread atual.
Definido sob namespace
Módulos: Ciclo de vida
Colapsode resumo constante
- DATABASE_OVERRIDE_KEY =
'[mongoid]:db-override'
- CLIENTS_KEY =
Constante para a chave para armazenar clientes.
'[mongoid]:clientes'
- CLIENT_OVERRIDE_KEY =
A chave para substituir o cliente.
'[mongoid]:client-override'
- CURRENT_SCOPE_KEY =
A chave para a pilha de escopo do thread atual.
'[mongoid]:current-scope'
- AUTOSAVES_KEY =
'[mongoid]:autosave'
- VALIDATIONS_KEY =
'[mongoid]:validations'
- STACK_KEYS =
Hash.Novo fazer |hash, chave| hash[chave] = "[mongoid]:#{key}-stack" end
- SESSIONS_KEY =
A chave para as sessões do tópico atual.
'[mongoid]:sessions'
- ModIFIED_DOCUMENTS_KEY =
A chave para armazenar documentos modificada dentro de transações.
'[mongoid]:modified-documents'
- EXECUTAR_CALLBACKS =
A chave que armazena o valor padrão para saber se as chamadas de resposta são ou não executadas em documentos.
'[mongoid]:execute-callbacks'
- BIND =
'vincular'.congelar
- Atribuir =
'atribuir'.congelar
- Construir =
'build'.congelar
- CARREGAR =
'load'.congelar
- CREATE =
'criar'.congelar
Recolhimento do Resumo do método de instância
-
#add_modified_document(session, document) ⇒ Object
Armazene uma referência ao documento que foi modificado dentro de uma transação associada à sessão.
-
#salvo automaticamente?(documento) ➤ true | false
O documento é salvo automaticamente no thread atual?
-
#autosaves ⇒ Hash
Obter todos os salvamentos automáticos no thread atual.
-
#autosaves_for(klass) ⇒ Array
Obter todos os salvamentos automáticos no thread atual da classe.
-
#begin_autosave(document) ⇒ Object
Iniciar o salvamento automático de um documento no thread atual.
-
#begin_execution(name) ➤ true
Iniciar a entrada em uma pilha local de thread nomeado.
-
#begin_validate(documento) ➤ Objeto
Começar a validar um documento no thread atual.
-
#begin_without_default_scope(klass) ➤ Objeto
privado
Comece a suprimir os escopos padrão para um determinado modelo na thread atual.
-
#clear_modified_documents(session) ⇒ Set<Mongoid::Document>
Limpa o conjunto de documentos modificados para a sessão fornecida e retorna o conteúdo do conjunto antes da liberação.
-
#clear_session(client: nil) ⇒ nil
Limpe a sessão em cache desta thread para um cliente.
-
#client_override ➤ string | Símbolo
Obtenha a substituição global do cliente.
-
#client_override=(nome) ➤ string | Símbolo
Defina a substituição do cliente global.
-
#current_scope(klass = nil) ➤ Critérios
Obtenha o escopo Mongoide atual.
-
#current_scope=(scope) ➤ Critérios
Defina o escopo do Mongoid atual.
-
#database_override ➤ string | Símbolo
Obtenha a substituição do banco de dados de dados global.
-
#database_override=(nome) ➤ string | Símbolo
Defina a substituição global do banco de dados de dados.
-
#delete(key) ➤ Objeto
Remove a variável nomeada do armazenamento local do thread.
-
#execute_callbacks=(sinalizador) ➤ Objeto
Indica se as chamadas de resposta do documento devem ser invocadas por padrão para o thread atual.
-
#execute_callbacks? ➤ verdadeiro | false
Consulta se os retornos de chamada de documento devem ser executados por padrão para o tópico atual.
-
#executando?(nome) ➤ verdadeiro
Estão no meio da execução da pilha nomeada.
-
#exit_autosave(documento) ➤ Objeto
Sair do salvamento automático de um documento no thread atual.
-
#exit_execution(name) ➤ true
Sair de uma pilha local de thread nomeado.
-
#exit_validate(documento) ➤ Objeto
Sair da validação de um documento no thread atual.
-
#exit_without_default_scope(klass) ➤ Objeto
privado
Sair da supressão de escopos padrão para um determinado modelo na thread atual.
-
#get(key, &default) ➤ Objeto | nada
Executa query da variável local da thread com o nome fornecido.
-
#get_session(client: nil) ⇒ Mongo::Session | nil
Obtenha a sessão em cache para este thread para um cliente.
-
#tem?(chave) ➤ verdadeiro | false
Consulta a presença de uma variável nomeada no armazenamento local do thread.
-
#modified_documents ➤ Hash<Mongo::Session, Set<Mongoid::Document>>
privado
Retorna o armazenamento de threads de documentos modificados.
-
# desessões ➤ Hash<Integer, Set>
privado
Retorna o armazenamento de threads de sessões.
-
#set(chave, valor) ➤ Objeto
Define uma variável thread-local com o nome fornecido para o valor fornecido.
-
#set_current_scope(scope, klass) ➤ Critérios
Defina o escopo do Mongoid atual.
-
#set_session(sessão, cliente: nil) ➤ Objeto
Armazene em cache uma sessão para este thread para um cliente.
-
#pilha(nome) ➤ Array
Obtenha a pilha nomeada.
-
#validado?(documento) ➤ true | false
O documento é validado no thread atual?
-
#validations ⇒ Hash
Obtenha todas as validações no thread atual.
-
#validations_for(klass) ⇒ Array
Obtenha todas as validações no thread atual da classe.
-
#sem_default_scope?(klass) ➤ booleano
privado
O escopo padrão do klass fornecido é suprimido no thread atual?
Detalhes do método de instância
#add_modified_document(session, document) ⇒ Object
Armazene uma referência ao documento que foi modificado dentro de uma transação associada à sessão.
435 436 437 438 439 |
# Arquivo 'lib/mongoid/threaded.rb', linha 435 def add_modified_document(session, documento) Método a menos que session&.in_transaction? modified_documents[session] << documento end |
#salvo automaticamente?(documento) ➤ true | false
O documento é salvo automaticamente no thread atual?
334 335 336 |
# Arquivo 'lib/mongoid/threaded.rb', linha 334 def salvo automaticamente?(documento) autosaves_for(documento.classe).incluir?(documento._id) end |
#autosaves ➤ Hash
Obter todos os salvamentos automáticos no thread atual.
356 357 358 |
# Arquivo 'lib/mongoid/threaded.rb', linha 356 def salvamento automático obter(AUTOSAVES_KEY) { {} } end |
#autosaves_for(klass) ⇒ Array
Obter todos os salvamentos automáticos no thread atual da classe.
378 379 380 |
# Arquivo 'lib/mongoid/threaded.rb', linha 378 def autosaves_for(classe) salvamento automático[classe] ||= [] end |
#begin_autosave(document) ⇒ Object
Iniciar o salvamento automático de um documento no thread atual.
185 186 187 |
# Arquivo 'lib/mongoid/threaded.rb', linha 185 def begin_autosave(documento) autosaves_for(documento.classe).push(documento._id) end |
#begin_execution(name) ➤ true
Iniciar a entrada em uma pilha local de thread nomeado.
117 118 119 |
# Arquivo 'lib/mongoid/threaded.rb', linha 117 def begin_execution(name) pilha(name).push(true) end |
#begin_validate(documento) ➤ Objeto
Começar a validar um documento no thread atual.
195 196 197 |
# Arquivo 'lib/mongoid/threaded.rb', linha 195 def begin_validate(documento) validations_for(documento.classe).push(documento._id) end |
#begin_without_default_scope(klass) ➤ Objeto
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Comece a suprimir os escopos padrão para um determinado modelo na thread atual.
227 228 229 |
# Arquivo 'lib/mongoid/threaded.rb', linha 227 def begin_without_default_scope(classe) pilha(:without_default_scope).push(classe) end |
.
Limpa o conjunto de documentos modificados para a sessão fornecida e retorna o conteúdo do conjunto antes da liberação.
448 449 450 |
# Arquivo 'lib/mongoid/threaded.rb', linha 448 def clear_modified_documents(session) modified_documents.excluir(session) || [] end |
#clear_session(client: nil) ⇒ nil
Para compatibilidade com versões anteriores, é permitido chamar este método sem
Limpe a sessão em cache desta thread para um cliente.
especificando o parâmetro ' cliente'.
425 426 427 |
# Arquivo 'lib/mongoid/threaded.rb', linha 425 def clear_session(cliente: nada) sessões.excluir(Cliente)&.end_session end |
#client_override ➤ string | Símbolo
Obtenha a substituição global do cliente.
249 250 251 |
# Arquivo 'lib/mongoid/threaded.rb', linha 249 def client_override obter(CLIENT_OVERRIDE_KEY) end |
#client_override=(nome) ➤ string | Símbolo
Defina a substituição do cliente global.
261 262 263 |
# Arquivo 'lib/mongoid/threaded.rb', linha 261 def client_override=(name) set(CLIENT_OVERRIDE_KEY, name) end |
#current_scope(klass = nil) ➤ Critérios
Obtenha o escopo Mongoide atual.
274 275 276 277 278 279 280 281 282 |
# Arquivo 'lib/mongoid/threaded.rb', linha 274 def current_scope(classe = nada) current_scope = obter(CURRENT_SCOPE_KEY) se classe && current_scope.respond_to?(:keys) current_scope[current_scope.keys.find { |k| k <= classe }] mais current_scope end end |
#current_scope=(scope) ➤ Critérios
Defina o escopo do Mongoid atual.
292 293 294 |
# Arquivo 'lib/mongoid/threaded.rb', linha 292 def current_scope=(escopo) set(CURRENT_SCOPE_KEY, escopo) end |
#database_override ➤ string | Símbolo
Obtenha a substituição do banco de dados de dados global.
127 128 129 |
# Arquivo 'lib/mongoid/threaded.rb', linha 127 def database_override obter(DATABASE_OVERRIDE_KEY) end |
#database_override=(nome) ➤ string | Símbolo
Defina a substituição global do banco de dados de dados.
139 140 141 |
# Arquivo 'lib/mongoid/threaded.rb', linha 139 def database_override=(name) set(DATABASE_OVERRIDE_KEY, name) end |
#delete(key) ➤ Objeto
Remove a variável nomeada do armazenamento local do thread.
84 85 86 |
# Arquivo 'lib/mongoid/threaded.rb', linha 84 def excluir(chave) set(chave, nada) end |
#execute_callbacks=(sinalizador) ➤ Objeto
Indica se as chamadas de resposta do documento devem ser invocadas por padrão para o thread atual. Documentos individuais podem substituir ainda mais o comportamento de retorno de chamada, mas isso será usado para o comportamento padrão.
474 475 476 |
# Arquivo 'lib/mongoid/threaded.rb', linha 474 def execute_callbacks=(flag) set(EXECUTAR_CALLBACKS, flag) end |
#execute_callbacks? ➤ verdadeiro | false
Consulta se os retornos de chamada de documento devem ser executados por padrão para o tópico atual.
A menos que indicado de outra forma (por #execute_callbacks=), isso retornará verdadeiro.
460 461 462 463 464 465 466 |
# Arquivo 'lib/mongoid/threaded.rb', linha 460 def execute_callbacks? se tem?(EXECUTAR_CALLBACKS) obter(EXECUTAR_CALLBACKS) mais true end end |
#executando?(nome) ➤ verdadeiro
Estão no meio da execução da pilha nomeada
151 152 153 |
# Arquivo 'lib/mongoid/threaded.rb', linha 151 def executando?(name) !pilha(name).vazio? end |
#exit_autosave(document) ➤ Objeto
Sair do salvamento automático de um documento no thread atual.
205 206 207 |
# Arquivo 'lib/mongoid/threaded.rb', linha 205 def exit_autosave(documento) autosaves_for(documento.classe).delete_one(documento._id) end |
#exit_execution(name) ➤ true
Sair de uma pilha local de thread nomeado.
163 164 165 |
# Arquivo 'lib/mongoid/threaded.rb', linha 163 def exit_execution(name) pilha(name).Pop end |
#exit_validate(documento) ➤ Objeto
Sair da validação de um documento no thread atual.
215 216 217 |
# Arquivo 'lib/mongoid/threaded.rb', linha 215 def exit_validate(documento) validations_for(documento.classe).delete_one(documento._id) end |
#exit_without_default_scope(klass) ➤ Objeto
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Sair da supressão de escopos padrão para um determinado modelo na thread atual.
239 240 241 |
# Arquivo 'lib/mongoid/threaded.rb', linha 239 def exit_without_default_scope(classe) pilha(:without_default_scope).excluir(classe) end |
#get(key, &default) ➤ Objeto | nada
Executa query da variável local da thread com o nome fornecido. Se um bloco for fornecido e a variável ainda não existir, o valor de retorno do bloco será definido como o valor da variável antes de retorná-la.
É muito impor- A colocação do estado local do thread em um armazenamento local do cabo resultará no estado invisível quando os retornos de chamada relevantes forem executados em uma nuvem diferente.
As chamadas de resposta afetadas são chamadas de resposta em cascata em filhos incorporados.
59 60 61 62 63 64 65 66 67 68 |
# Arquivo 'lib/mongoid/threaded.rb', linha 59 def obter(chave, &default) Resultado = Thread.Current.thread_variable_get(chave) se Resultado.nada? && default Resultado = rendimento set(chave, Resultado) end Resultado end |
#get_session(client: nil) ⇒ Mongo::Session | nil
Para compatibilidade com versões anteriores, é permitido chamar este método sem
Obtenha a sessão em cache para este thread para um cliente.
especificando o parâmetro ' cliente'.
413 414 415 |
# Arquivo 'lib/mongoid/threaded.rb', linha 413 def get_session(cliente: nada) sessões[Cliente] end |
#tem?(chave) ➤ verdadeiro | false
Consulta a presença de uma variável nomeada no armazenamento local do thread.
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# Arquivo 'lib/mongoid/threaded.rb', linha 93 def tem?(chave) # Aqui temos um exemplo clássico de JRuby não se comportando como MRI. Em # MRI, se você definir uma variável de thread como nula, ela a removerá da lista # e chamadas subsequentes para thread_variable?(key) retornarão falso. Não # assim com JRuby. Depois de definir, não é possível desconfigurar a variável de thread. # # No entanto, como definir uma variável como nula deve removê-la, # podemos presumir que uma variável com valor nulo não existe realmente. # Então, em vez disso: # Thread.current.thread_variable?(key) # Temos que fazer isso: !obter(chave).nada? end |
#modified_documents ➤ Hash<Mongo::Session, Set<Mongoid::Document>>
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Retorna o armazenamento de threads de documentos modificados.
493 494 495 |
# Arquivo 'lib/mongoid/threaded.rb', linha 493 def modified_documents obter(ModIFIED_DOCUMENTS_KEY) { Hash.Novo { |H, k| H[k] = definir.Novo } } end |
# desessões ➤ Hash<Integer, Set>
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Retorna o armazenamento de threads de sessões.
483 484 485 |
# Arquivo 'lib/mongoid/threaded.rb', linha 483 def sessões obter(SESSIONS_KEY) { {}.compare_by_identity } end |
#set(chave, valor) ➤ Objeto
Define uma variável thread-local com o nome fornecido para o valor fornecido. Consulte #get para uma discussão sobre por que esse método é necessário e por que Thread#[]= deve ser evitado em chamadas de resposta em cascata em filhos incorporados.
77 78 79 |
# Arquivo 'lib/mongoid/threaded.rb', linha 77 def set(chave, valor) Thread.Current.thread_variable_set(chave, valor) end |
#set_current_scope(scope, klass) ➤ Critérios
Defina o escopo do Mongoid atual. Seguro para encadeamento de escopo de vários modelos.
305 306 307 308 309 310 311 312 |
# Arquivo 'lib/mongoid/threaded.rb', linha 305 def set_current_scope(escopo, classe) se escopo.nada? unset_current_scope(classe) mais current_scope = obter(CURRENT_SCOPE_KEY) { {} } current_scope[classe] = escopo end end |
#set_session(sessão, cliente: nil) ➤ Objeto
Para compatibilidade com versões anteriores, é permitido chamar este método sem
Armazene em cache uma sessão para este thread para um cliente.
especificando o parâmetro ' cliente'.
401 402 403 |
# Arquivo 'lib/mongoid/threaded.rb', linha 401 def set_session(session, cliente: nada) sessões[Cliente] = session end |
#pilha(nome) ➤ Array
Obtenha a pilha nomeada.
175 176 177 |
# Arquivo 'lib/mongoid/threaded.rb', linha 175 def pilha(name) obter(STACK_KEYS[name]) { [] } end |
#validado?(documento) ➤ true | false
O documento é validado no thread atual?
346 347 348 |
# Arquivo 'lib/mongoid/threaded.rb', linha 346 def validado?(documento) validations_for(documento.classe).incluir?(documento._id) end |
#validações ➤ Hash
Obtenha todas as validações no thread atual.
366 367 368 |
# Arquivo 'lib/mongoid/threaded.rb', linha 366 def Validações obter(VALIDATIONS_KEY) { {} } end |
#validations_for(klass) ⇒ Array
Obtenha todas as validações no thread atual da classe.
390 391 392 |
# Arquivo 'lib/mongoid/threaded.rb', linha 390 def validations_for(classe) Validações[classe] ||= [] end |
#sem_default_scope?(klass) ➤ booleano
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
O escopo padrão do klass fornecido é suprimido no thread atual?
322 323 324 |
# Arquivo 'lib/mongoid/threaded.rb', linha 322 def sem_default_scope?(classe) pilha(:without_default_scope).incluir?(classe) end |