Módulo: Mongoid::Threaded
- Estendido por:
- Threaded
- Incluído em:
- Threaded
- Definido em:
- lib/mongoid/threaded.rb,
lib/mongoid/threaded/Lifecycle.rb
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
- STORAGE_KEY =
A chave para o armazenamento local compartilhado de thread e nuvem. Deve ser um símbolo, porque as chaves do armazenamento local em Fibra devem ser símbolos.
:'[mongoid]'- STORAGE_OWNER_KEY =
Acompanha qual coluna possui o hash de armazenamento, para detectar quando uma camada herda (em vez de criar) seu armazenamento de uma camada principal.
:'[mongoid]:wner'- DATABASE_OVERRIDE_KEY =
'db-override'- CLIENT_OVERRIDE_KEY =
A chave para substituir o cliente.
'substituição do cliente'- CURRENT_SCOPE_KEY =
A chave para a pilha de escopo do thread atual.
'current-scope'- AUTOSAVES_KEY =
'salvamento automático'- VALIDATIONS_KEY =
'Validações'- TOUCH_MEGED_KEY =
'toque mesclado'- STACK_KEYS =
Hash.Novo fazer |hash, chave| hash[chave] = "#{key}-pilha" end
- SESSIONS_KEY =
A chave para as sessões do tópico atual.
'sessões'- ModIFIED_DOCUMENTS_KEY =
A chave para armazenar documentos modificada dentro de transações.
'documentos-modificados'- 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.
'execute-chamadas de resposta'- BIND =
'bind'- Atribuir =
'atribuir'- Construir =
'COMPILAR'- CARREGAR =
'carregar'- CREATE =
'criar'
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_touch_merged(document) ⇒ Objeto
Marcar que as atualizações de toque de um document foram mescladas em uma inserção atômica no thread atual.
-
#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.
-
#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_toque_merged(document) ➤ Objeto
Limpe o sinalizador de toque mesclado de um document no thread atual.
-
#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 queries da variável local da thread ou da nuvem 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.
-
#modified_documents ➤ Hash<Mongo::Session, Set<Mongoid::Document>>
privado
Retorna o armazenamento de threads de documentos modificados.
-
#redefinir! ➤ Objeto
Redefine o armazenamento local de thread ou corda atual para seu estado inicial.
-
# desessões ➤ Hash<Integer, Set>
privado
Retorna o armazenamento de threads de sessões.
-
#set(chave, valor) ➤ Objeto
Define uma variável no armazenamento 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.
-
#toque_merged ➤ Hash
Obtenha todo o rastreamento por toque na conversa atual.
-
#toque_merged?(document) ➤ true | false
O document sinalizado como tendo suas atualizações de toque mescladas em uma inserção atômica?
-
#toque_merged_for(klass) ➤ Array
Obtenha todos os ID de document mesclados por toque no thread atual da classe.
-
#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.
504 505 506 507 508 |
# Arquivo 'lib/mongoid/threaded.rb', linha 504 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?
368 369 370 |
# Arquivo 'lib/mongoid/threaded.rb', linha 368 def salvo automaticamente?(documento) autosaves_for(documento.classe).incluir?(documento._id) end |
#autosaves ➤ Hash
Obter todos os salvamentos automáticos no thread atual.
403 404 405 |
# Arquivo 'lib/mongoid/threaded.rb', linha 403 def salvamento automático obter(AUTOSAVES_KEY) { {} } end |
#autosaves_for(klass) ⇒ Array
Obter todos os salvamentos automáticos no thread atual da classe.
425 426 427 |
# Arquivo 'lib/mongoid/threaded.rb', linha 425 def autosaves_for(classe) salvamento automático[classe] ||= [] end |
#begin_autosave(document) ⇒ Object
Iniciar o salvamento automático de um documento no thread atual.
198 199 200 |
# Arquivo 'lib/mongoid/threaded.rb', linha 198 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.
130 131 132 |
# Arquivo 'lib/mongoid/threaded.rb', linha 130 def begin_execution(name) pilha(name).push(true) end |
#begin_touch_merged(document) ⇒ Objeto
Marcar que as atualizações de toque de um document foram mescladas em uma inserção atômica no thread atual.
219 220 221 |
# Arquivo 'lib/mongoid/threaded.rb', linha 219 def begin_toque_merged(documento) toque_merged_for(documento.classe).push(documento._id) end |
#begin_validate(documento) ➤ Objeto
Começar a validar um documento no thread atual.
208 209 210 |
# Arquivo 'lib/mongoid/threaded.rb', linha 208 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.
261 262 263 |
# Arquivo 'lib/mongoid/threaded.rb', linha 261 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.
517 518 519 |
# Arquivo 'lib/mongoid/threaded.rb', linha 517 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 client.
494 495 496 |
# Arquivo 'lib/mongoid/threaded.rb', linha 494 def clear_session(cliente: nada) sessões.excluir(Cliente)&.end_session end |
#client_override ➤ string | Símbolo
Obtenha a substituição global do cliente.
283 284 285 |
# Arquivo 'lib/mongoid/threaded.rb', linha 283 def client_override obter(CLIENT_OVERRIDE_KEY) end |
#client_override=(nome) ➤ string | Símbolo
Defina a substituição do cliente global.
295 296 297 |
# Arquivo 'lib/mongoid/threaded.rb', linha 295 def client_override=(name) set(CLIENT_OVERRIDE_KEY, name) end |
#current_scope(klass = nil) ➤ Critérios
Obtenha o escopo Mongoide atual.
308 309 310 311 312 313 314 315 316 |
# Arquivo 'lib/mongoid/threaded.rb', linha 308 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.
326 327 328 |
# Arquivo 'lib/mongoid/threaded.rb', linha 326 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.
140 141 142 |
# Arquivo 'lib/mongoid/threaded.rb', linha 140 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.
152 153 154 |
# Arquivo 'lib/mongoid/threaded.rb', linha 152 def database_override=(name) set(DATABASE_OVERRIDE_KEY, name) end |
#delete(key) ➤ Objeto
Remove a variável nomeada do armazenamento local.
109 110 111 |
# Arquivo 'lib/mongoid/threaded.rb', linha 109 def excluir(chave) Armazenamento.excluir(chave) 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.
543 544 545 |
# Arquivo 'lib/mongoid/threaded.rb', linha 543 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.
529 530 531 532 533 534 535 |
# Arquivo 'lib/mongoid/threaded.rb', linha 529 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
164 165 166 |
# Arquivo 'lib/mongoid/threaded.rb', linha 164 def executando?(name) !pilha(name).vazio? end |
#exit_autosave(document) ➤ Objeto
Sair do salvamento automático de um documento no thread atual.
229 230 231 |
# Arquivo 'lib/mongoid/threaded.rb', linha 229 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.
176 177 178 |
# Arquivo 'lib/mongoid/threaded.rb', linha 176 def exit_execution(name) pilha(name).Pop end |
#exit_touch_merged(document) ⇒ Objeto
Limpe o sinalizador de toque mesclado de um document no thread atual.
249 250 251 |
# Arquivo 'lib/mongoid/threaded.rb', linha 249 def exit_toque_merged(documento) toque_merged_for(documento.classe).delete_one(documento._id) end |
#exit_validate(documento) ➤ Objeto
Sair da validação de um documento no thread atual.
239 240 241 |
# Arquivo 'lib/mongoid/threaded.rb', linha 239 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.
273 274 275 |
# Arquivo 'lib/mongoid/threaded.rb', linha 273 def exit_without_default_scope(classe) pilha(:without_default_scope).excluir(classe) end |
#get(key, &default) ➤ Objeto | nada
Executa queries da variável local da thread ou da nuvem 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.
84 85 86 87 88 89 90 91 92 93 |
# Arquivo 'lib/mongoid/threaded.rb', linha 84 def obter(chave, &default) Resultado = Armazenamento[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 client.
482 483 484 |
# Arquivo 'lib/mongoid/threaded.rb', linha 482 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.
118 119 120 |
# Arquivo 'lib/mongoid/threaded.rb', linha 118 def tem?(chave) Armazenamento.chave?(chave) 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.
562 563 564 |
# Arquivo 'lib/mongoid/threaded.rb', linha 562 def modified_documents obter(ModIFIED_DOCUMENTS_KEY) { Hash.Novo { |H, k| H[k] = definir.Novo } } end |
#redefinir! ➤ Objeto
Redefine o armazenamento local de thread ou corda atual para seu estado inicial. Isso é útil para garantir que o estado esteja limpo ao iniciar uma nova thread ou corda.
O valor de Mongoid::Config.real_isolation_level é usado para determinar se deve redefinir o armazenamento para o thread ou coluna atual.
53 54 55 56 57 58 59 60 61 62 63 |
# Arquivo 'lib/mongoid/threaded.rb', linha 53 def reset! caso Config.real_isolation_level quando :thread Thread.Current.thread_variable_set(STORAGE_KEY, nada) quando :fiber Fibra[STORAGE_KEY] = {} Fibra[STORAGE_OWNER_KEY] = Fibra.Current.object_id mais aumentar "Nível de isolamento desconhecido: #{Config.real_isolation_level.inspect}" end 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.
552 553 554 |
# Arquivo 'lib/mongoid/threaded.rb', linha 552 def sessões obter(SESSIONS_KEY) { {}.compare_by_identity } end |
#set(chave, valor) ➤ Objeto
Define uma variável no armazenamento 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.
102 103 104 |
# Arquivo 'lib/mongoid/threaded.rb', linha 102 def set(chave, valor) Armazenamento[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.
339 340 341 342 343 344 345 346 |
# Arquivo 'lib/mongoid/threaded.rb', linha 339 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 client.
470 471 472 |
# Arquivo 'lib/mongoid/threaded.rb', linha 470 def set_session(session, cliente: nada) sessões[Cliente] = session end |
#pilha(nome) ➤ Array
Obtenha a pilha nomeada.
188 189 190 |
# Arquivo 'lib/mongoid/threaded.rb', linha 188 def pilha(name) obter(STACK_KEYS[name]) { [] } end |
#toque_merged ➤ Hash
Obtenha todo o rastreamento por toque na conversa atual.
447 448 449 |
# Arquivo 'lib/mongoid/threaded.rb', linha 447 def toque_merged obter(TOUCH_MEGED_KEY) { {} } end |
#toque_merged?(document) ➤ true | false
O document sinalizado como tendo suas atualizações de toque mescladas em uma inserção atômica?
393 394 395 |
# Arquivo 'lib/mongoid/threaded.rb', linha 393 def toque_merged?(documento) toque_merged_for(documento.classe).incluir?(documento._id) end |
#toque_merged_for(klass) ➤ Array
Obtenha todos os ID de document mesclados por toque no thread atual da classe.
459 460 461 |
# Arquivo 'lib/mongoid/threaded.rb', linha 459 def toque_merged_for(classe) toque_merged[classe] ||= [] end |
#validado?(documento) ➤ true | false
O documento é validado no thread atual?
380 381 382 |
# Arquivo 'lib/mongoid/threaded.rb', linha 380 def validado?(documento) validations_for(documento.classe).incluir?(documento._id) end |
#validações ➤ Hash
Obtenha todas as validações no thread atual.
413 414 415 |
# Arquivo 'lib/mongoid/threaded.rb', linha 413 def Validações obter(VALIDATIONS_KEY) { {} } end |
#validations_for(klass) ⇒ Array
Obtenha todas as validações no thread atual da classe.
437 438 439 |
# Arquivo 'lib/mongoid/threaded.rb', linha 437 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?
356 357 358 |
# Arquivo 'lib/mongoid/threaded.rb', linha 356 def sem_default_scope?(classe) pilha(:without_default_scope).incluir?(classe) end |