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

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.

Parâmetros:

  • session (Mongo::Session)

    Sessão em escopo da qual o documento foi modificado.

  • documento (Mongoid::Document)

    documento Mongoide que foi modificado.



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?

Exemplos:

O documento é salvo automaticamente?

Threaded.autosaved?(doc)

Parâmetros:

  • documento (Documento)

    O documento a ser verificado.

Retorna:

  • (verdadeiro | falso)

    Se o documento for salvo automaticamente.



368
369
370
# Arquivo 'lib/mongoid/threaded.rb', linha 368

def salvo automaticamente?(documento)
  autosaves_for(documento.classe).incluir?(documento._id)
end

#autosavesHash

Obter todos os salvamentos automáticos no thread atual.

Exemplos:

Obtenha todos os salvamentos automáticos.

Threaded.autosaves

Retorna:

  • (Hash)

    O atual salvamento automático.



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.

Exemplos:

Obtenha todos os salvamentos automáticos.

Threaded.autosaves_for(Person)

Parâmetros:

  • classe (Classe)

    A classe a ser verificada.

Retorna:

  • (Array)

    O atual salvamento automático.



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.

Exemplos:

Begin autosave.

Threaded.begin_autosave(doc)

Parâmetros:

  • documento (Documento)

    O documento a ser salvo automaticamente.



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.

Exemplos:

Iniciar a entrada na pilha.

Threaded.begin_execution(:create)

Parâmetros:

  • name (string)

    O nome da pilha

Retorna:

  • (verdadeiro)

    Verdade.



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.

Exemplos:

Iniciar o toque mesclado.

Threaded.begin_touch_merged(doc)

Parâmetros:

  • documento (Documento)

    O documento incorporado sendo inserido.



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.

Exemplos:

Begin validation.

Threaded.begin_validate(doc)

Parâmetros:

  • documento (Documento)

    O documento para validar.



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.

Exemplos:

Comece sem a pilha de escopo padrão.

Threaded.begin_without_default_scope(klass)

Parâmetros:

  • classe (Classe)

    O modelo para suprimir o escopo padrão.



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.

Parâmetros:

  • session (Mongo::Session)

    Sessão para a qual o conjunto de documentos modificados deve ser limpo.

Retorna:

  • (Set<Mongoid::Document>)

    Coleção de documentos modificados antes de ser limpa.



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

Observação:

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.

Parâmetros:

  • Cliente (Mongo::Client | nil) (padrão para: nil)

    O cliente para o qual limpar a sessão.

Retorna:

  • (nil)


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.

Exemplos:

Obtenha a substituição global do cliente.

Threaded.client_override

Retorna:

  • (string | Símbolo)

    A substituição.



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.

Exemplos:

Defina a substituição do cliente global.

Threaded.client_override = :testing

Parâmetros:

  • name (string | Símbolo)

    O nome de substituição global.

Retorna:

  • (string | Símbolo)

    A substituição.



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.

Exemplos:

Obtenha o escopo.

Threaded.current_scope(klass)
Threaded.current_scope

Parâmetros:

  • classe (Klass) (padrão para: nil)

    O tipo de classe do escopo.

Retorna:



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.

Exemplos:

Defina o escopo.

Threaded.current_scope = scope

Parâmetros:

Retorna:



326
327
328
# Arquivo 'lib/mongoid/threaded.rb', linha 326

def current_scope=(escopo)
  set(CURRENT_SCOPE_KEY, escopo)
end

#database_overridestring | Símbolo

Obtenha a substituição do banco de dados de dados global.

Exemplos:

Obtenha a substituição do banco de dados de dados global.

Threaded.database_override

Retorna:

  • (string | Símbolo)

    A substituição.



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.

Exemplos:

Defina a substituição global do banco de dados de dados.

Threaded.database_override = :testing

Parâmetros:

  • name (string | Símbolo)

    O nome de substituição global.

Retorna:

  • (string | Símbolo)

    A substituição.



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.

Parâmetros:

  • chave (string | Símbolo)

    o nome da variável a ser removida.



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.

Parâmetros:

  • flag (verdadeiro | falso)

    Se as chamada de resposta de documento devem ou não ser executadas por 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.

Retorna:

  • (verdadeiro | falso)

    Se as chamada de resposta de documento devem ou não ser executadas por padrão.



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

Exemplos:

Estamos na execução da pilha?

Threaded.executing?(:create)

Parâmetros:

  • name (Símbolo)

    O nome da pilha

Retorna:

  • (verdadeiro)

    Se a pilha estiver sendo executada.



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.

Exemplos:

Sair do salvamento automático.

Threaded.exit_autosave(doc)

Parâmetros:

  • documento (Documento)

    O documento a ser salvo automaticamente.



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.

Exemplos:

Sair da pilha.

Threaded.exit_execution(:create)

Parâmetros:

  • name (Símbolo)

    O nome da pilha

Retorna:

  • (verdadeiro)

    Verdade.



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.

Exemplos:

Sair do toque mesclado.

Threaded.exit_touch_merged(doc)

Parâmetros:

  • documento (Documento)

    O document a ser limpo.



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.

Exemplos:

Sair da validação.

Threaded.exit_validate(doc)

Parâmetros:

  • documento (Documento)

    O documento para validar.



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.

Exemplos:

Sair sem a pilha de escopo padrão.

Threaded.exit_without_default_scope(klass)

Parâmetros:

  • classe (Classe)

    O modelo para cancelar a supressão do escopo padrão.



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.

Parâmetros:

  • chave (string | Símbolo)

    o nome da variável a ser consultada

  • default (Proc)

    um bloco opcional que deve retornar o valor padrão (inicial) desta variável.

Retorna:

  • (Object | nil)

    o valor da variável consultada ou nulo se não estiver definido e nenhum padrão foi fornecido.



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

Observação:

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.

Parâmetros:

  • Cliente (Mongo::Client | nil) (padrão para: nil)

    O cliente para o cache da sessão.

Retorna:

  • (Mongo::Session | nil)

    A sessão armazenada em cache nesta thread ou nil.



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.

Parâmetros:

  • chave (string | Símbolo)

    o nome da variável a ser consultada.

Retorna:

  • (verdadeiro | falso)

    se a variável fornecida está presente ou não.



118
119
120
# Arquivo 'lib/mongoid/threaded.rb', linha 118

def tem?(chave)
  Armazenamento.chave?(chave)
end

#modified_documentsHash<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.

Retorna:

  • (Hash<Mongo::Sessão, Definir<Mongoid::Documento>>)

    Os documentos modificados indexados por sessão.



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õesHash<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.

Retorna:

  • (Hash <Inteiro, conjunto>)

    As sessões indexadas por ID de objeto do cliente .



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.

Parâmetros:

  • chave (string | Símbolo)

    o nome da variável a ser definida.

  • valor (Object | nil)

    o valor da variável a ser definida (ou nil se você desejar desmarcar a variável)



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.

Exemplos:

Defina o escopo.

Threaded.current_scope(scope, klass)

Parâmetros:

  • escopo (Critérios)

    O escopo atual.

  • classe (Classe)

    A classe do modelo atual.

Retorna:



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

Observação:

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.

Parâmetros:

  • session (Mongo::Session)

    A sessão a ser salva.

  • Cliente (Mongo::Client | nil) (padrão para: nil)

    O cliente para o cache da sessão.



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.

Exemplos:

Obter uma pilha por nome

Threaded.stack(:create)

Parâmetros:

  • name (Símbolo)

    O nome da pilha

Retorna:

  • (Array)

    A pilha.



188
189
190
# Arquivo 'lib/mongoid/threaded.rb', linha 188

def pilha(name)
  obter(STACK_KEYS[name]) { [] }
end

#toque_mergedHash

Obtenha todo o rastreamento por toque na conversa atual.

Exemplos:

GET Obtenha todas as mesclagens de toque.

Threaded.touch_merged

Retorna:

  • (Hash)

    O atual hash de rastreamento mesclado ao toque.



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?

Exemplos:

O document é mesclado por toque?

Threaded.touch_merged?(doc)

Parâmetros:

  • documento (Documento)

    O documento a ser verificado.

Retorna:

  • (verdadeiro | falso)

    Se o toque do document foi mesclado.



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.

Exemplos:

GET Obtenha todas as mesclagens de toque.

Threaded.touch_merged_for(Sofa)

Parâmetros:

  • classe (Classe)

    A classe a ser verificada.

Retorna:

  • (Array)

    Os IDs de document atuais mesclados por toque.



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?

Exemplos:

O documento está validado?

Threaded.validated?(doc)

Parâmetros:

  • documento (Documento)

    O documento a ser verificado.

Retorna:

  • (verdadeiro | falso)

    Se o documento for validado.



380
381
382
# Arquivo 'lib/mongoid/threaded.rb', linha 380

def validado?(documento)
  validations_for(documento.classe).incluir?(documento._id)
end

#validaçõesHash

Obtenha todas as validações no thread atual.

Exemplos:

Obtenha todas as validações.

Threaded.validations

Retorna:

  • (Hash)

    As validações atuais.



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.

Exemplos:

Obtenha todas as validações.

Threaded.validations_for(Person)

Parâmetros:

  • classe (Classe)

    A classe a ser verificada.

Retorna:

  • (Array)

    As validações atuais.



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?

Exemplos:

O escopo padrão do klass fornecido é suprimido?

Threaded.without_default_scope?(klass)

Parâmetros:

  • classe (Classe)

    O modelo para verificar a supressão de escopo padrão.

Retorna:



356
357
358
# Arquivo 'lib/mongoid/threaded.rb', linha 356

def sem_default_scope?(classe)
  pilha(:without_default_scope).incluir?(classe)
end