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

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

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.



365
366
367
368
369
# Arquivo 'lib/mongoid/threaded.rb', linha 365

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.



264
265
266
# Arquivo 'lib/mongoid/threaded.rb', linha 264

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.



286
287
288
# Arquivo 'lib/mongoid/threaded.rb', linha 286

def salvamento automático
  Thread.Current[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.



308
309
310
# Arquivo 'lib/mongoid/threaded.rb', linha 308

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.



115
116
117
# Arquivo 'lib/mongoid/threaded.rb', linha 115

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.



47
48
49
# Arquivo 'lib/mongoid/threaded.rb', linha 47

def begin_execution(name)
  pilha(name).push(true)
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.



125
126
127
# Arquivo 'lib/mongoid/threaded.rb', linha 125

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.



157
158
159
# Arquivo 'lib/mongoid/threaded.rb', linha 157

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.



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

def clear_modified_documents(session)
  modified_documents[session].dup
garantir
  modified_documents[session].Limpar
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 ' cliente'.

Parâmetros:

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

    O cliente para o qual limpar a sessão.

Retorna:

  • (nil)


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

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.



179
180
181
# Arquivo 'lib/mongoid/threaded.rb', linha 179

def client_override
  Thread.Current[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.



191
192
193
# Arquivo 'lib/mongoid/threaded.rb', linha 191

def client_override=(name)
  Thread.Current[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:



204
205
206
207
208
209
210
211
212
# Arquivo 'lib/mongoid/threaded.rb', linha 204

def current_scope(classe = nada)
  se classe && Thread.Current[CURRENT_SCOPE_KEY].respond_to?(:keys)
    Thread.Current[CURRENT_SCOPE_KEY][
        Thread.Current[CURRENT_SCOPE_KEY].keys.find { |k| k <= classe }
    ]
  mais
    Thread.Current[CURRENT_SCOPE_KEY]
  end
end

#current_scope=(scope) ➤ Critérios

Defina o escopo do Mongoid atual.

Exemplos:

Defina o escopo.

Threaded.current_scope = scope

Parâmetros:

Retorna:



222
223
224
# Arquivo 'lib/mongoid/threaded.rb', linha 222

def current_scope=(escopo)
  Thread.Current[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.



57
58
59
# Arquivo 'lib/mongoid/threaded.rb', linha 57

def database_override
  Thread.Current[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.



69
70
71
# Arquivo 'lib/mongoid/threaded.rb', linha 69

def database_override=(name)
  Thread.Current[DATABASE_OVERRIDE_KEY] = name
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.



406
407
408
# Arquivo 'lib/mongoid/threaded.rb', linha 406

def execute_callbacks=(flag)
  Thread.Current[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.



392
393
394
395
396
397
398
# Arquivo 'lib/mongoid/threaded.rb', linha 392

def execute_callbacks?
  se Thread.Current.chave?(EXECUTAR_CALLBACKS)
    Thread.Current[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.



81
82
83
# Arquivo 'lib/mongoid/threaded.rb', linha 81

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.



135
136
137
# Arquivo 'lib/mongoid/threaded.rb', linha 135

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.



93
94
95
# Arquivo 'lib/mongoid/threaded.rb', linha 93

def exit_execution(name)
  pilha(name).Pop
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.



145
146
147
# Arquivo 'lib/mongoid/threaded.rb', linha 145

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.



169
170
171
# Arquivo 'lib/mongoid/threaded.rb', linha 169

def exit_without_default_scope(classe)
  pilha(:without_default_scope).excluir(classe)
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 ' cliente'.

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.



343
344
345
# Arquivo 'lib/mongoid/threaded.rb', linha 343

def get_session(cliente: nada)
  sessões[Cliente]
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.



425
426
427
428
429
# Arquivo 'lib/mongoid/threaded.rb', linha 425

def modified_documents
  Thread.Current[ModIFIED_DOCUMENTS_KEY] ||= Hash.Novo fazer |H, k|
    H[k] = definir.Novo
  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 .



415
416
417
# Arquivo 'lib/mongoid/threaded.rb', linha 415

def sessões
  Thread.Current[SESSIONS_KEY] ||= {}.compare_by_identity
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:



235
236
237
238
239
240
241
242
# Arquivo 'lib/mongoid/threaded.rb', linha 235

def set_current_scope(escopo, classe)
  se escopo.nada?
    unset_current_scope(classe)
  mais
    Thread.Current[CURRENT_SCOPE_KEY] ||= {}
    Thread.Current[CURRENT_SCOPE_KEY][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 ' cliente'.

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.



331
332
333
# Arquivo 'lib/mongoid/threaded.rb', linha 331

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.



105
106
107
# Arquivo 'lib/mongoid/threaded.rb', linha 105

def pilha(name)
  Thread.Current[STACK_KEYS[name]] ||= []
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.



276
277
278
# Arquivo 'lib/mongoid/threaded.rb', linha 276

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.



296
297
298
# Arquivo 'lib/mongoid/threaded.rb', linha 296

def Validações
  Thread.Current[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.



320
321
322
# Arquivo 'lib/mongoid/threaded.rb', linha 320

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:



252
253
254
# Arquivo 'lib/mongoid/threaded.rb', linha 252

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