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

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.

[Ver fonte]

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?

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.

[Ver fonte]

334
335
336
# Arquivo 'lib/mongoid/threaded.rb', linha 334

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.

[Ver fonte]

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.

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.

[Ver fonte]

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.

Exemplos:

Begin autosave.

Threaded.begin_autosave(doc)

Parâmetros:

  • documento (Documento)

    O documento a ser salvo automaticamente.

[Ver fonte]

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.

Exemplos:

Iniciar a entrada na pilha.

Threaded.begin_execution(:create)

Parâmetros:

  • name (string)

    O nome da pilha

Retorna:

  • (verdadeiro)

    Verdade.

[Ver fonte]

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.

Exemplos:

Begin validation.

Threaded.begin_validate(doc)

Parâmetros:

  • documento (Documento)

    O documento para validar.

[Ver fonte]

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.

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.

[Ver fonte]

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.

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.

[Ver fonte]

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

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)
[Ver fonte]

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.

Exemplos:

Obtenha a substituição global do cliente.

Threaded.client_override

Retorna:

  • (string | Símbolo)

    A substituição.

[Ver fonte]

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.

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.

[Ver fonte]

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.

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:

[Ver fonte]

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.

Exemplos:

Defina o escopo.

Threaded.current_scope = scope

Parâmetros:

Retorna:

[Ver fonte]

292
293
294
# Arquivo 'lib/mongoid/threaded.rb', linha 292

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.

[Ver fonte]

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.

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.

[Ver fonte]

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.

Parâmetros:

  • chave (string | Símbolo)

    o nome da variável a ser removida.

[Ver fonte]

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.

Parâmetros:

  • flag (verdadeiro | falso)

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

[Ver fonte]

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.

Retorna:

  • (verdadeiro | falso)

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

[Ver fonte]

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

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.

[Ver fonte]

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.

Exemplos:

Sair do salvamento automático.

Threaded.exit_autosave(doc)

Parâmetros:

  • documento (Documento)

    O documento a ser salvo automaticamente.

[Ver fonte]

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.

Exemplos:

Sair da pilha.

Threaded.exit_execution(:create)

Parâmetros:

  • name (Símbolo)

    O nome da pilha

Retorna:

  • (verdadeiro)

    Verdade.

[Ver fonte]

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.

Exemplos:

Sair da validação.

Threaded.exit_validate(doc)

Parâmetros:

  • documento (Documento)

    O documento para validar.

[Ver fonte]

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.

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.

[Ver fonte]

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.

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.

[Ver fonte]

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

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.

[Ver fonte]

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.

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.

[Ver fonte]

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_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.

[Ver fonte]

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

[Ver fonte]

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.

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 desejar desconfigurar a variável)

[Ver fonte]

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.

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:

[Ver fonte]

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

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.

[Ver fonte]

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.

Exemplos:

Obter uma pilha por nome

Threaded.stack(:create)

Parâmetros:

  • name (Símbolo)

    O nome da pilha

Retorna:

  • (Array)

    A pilha.

[Ver fonte]

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?

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.

[Ver fonte]

346
347
348
# Arquivo 'lib/mongoid/threaded.rb', linha 346

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.

[Ver fonte]

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.

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.

[Ver fonte]

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?

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:

[Ver fonte]

322
323
324
# Arquivo 'lib/mongoid/threaded.rb', linha 322

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