Módulo: Mongoid::Clients::Sessions::ClassMethods

Incluído em:
Mongoid
Definido em:
lib/mongoid/clients/sessions.rb

Colapsode resumo constante

CALLBACK_ACTIONS =

Essa constante faz parte de uma API privada. Você deve evitar usar essa constante, se possível, pois ela pode ser removida ou alterada no futuro.

Ações que podem ser usadas para trigger chamadas de resposta transacionais.

[:create, :destroy, :update]

Recolhimento do Resumo do método de instância

Detalhes do método de instância

#after_commit(*args, &block) ➤ Objeto

Define que um chamada de resposta de chamada é chamado após a confirmação de uma transação. A chamada de resposta de resposta é chamada somente se o documento for criado, atualizado ou destruído na transação.

Consulte ActiveSupport::Callbacks::ClassMethods::set_callback para mais informações sobre parâmetros de método e possíveis opções.



114
115
116
117
# Arquivo 'lib/mongoid/clients/sessions.rb', linha 114

def after_commit(*Args, &noum: bloco ; verb: bloquear)
  set_options_for_callbacks!(Args)
  set_callback(:commit, :after, *Args, &noum: bloco ; verb: bloquear)
end

#after_create_commit(*args, &block) ➤ Objeto

Atalho para after_commit :hook, on: :create.



126
127
128
129
# Arquivo 'lib/mongoid/clients/sessions.rb', linha 126

def after_create_commit(*Args, &noum: bloco ; verb: bloquear)
  set_options_for_callbacks!(Args, em: :create)
  set_callback(:commit, :after, *Args, &noum: bloco ; verb: bloquear)
end

#after_destroy_commit(*args, &block) ➤ Objeto

Atalho para after_commit :hook, on: :destroy.



138
139
140
141
# Arquivo 'lib/mongoid/clients/sessions.rb', linha 138

def after_destroy_commit(*Args, &noum: bloco ; verb: bloquear)
  set_options_for_callbacks!(Args, em: :destroy)
  set_callback(:commit, :after, *Args, &noum: bloco ; verb: bloquear)
end

#after_rollback(*args, &block) ➤ Objeto

Esse chamada de resposta de chamada é chamado depois que uma criação, atualização ou destruição é revertida.

Verifique a documentação do after_commit para opções.



146
147
148
149
# Arquivo 'lib/mongoid/clients/sessions.rb', linha 146

def after_rollback(*Args, &noum: bloco ; verb: bloquear)
  set_options_for_callbacks!(Args)
  set_callback(:rollback, :after, *Args, &noum: bloco ; verb: bloquear)
end

#after_save_commit(*args, &block) ➤ Objeto

Atalho para after_commit :hook, on: [ :create, :update ]



120
121
122
123
# Arquivo 'lib/mongoid/clients/sessions.rb', linha 120

def after_save_commit(*Args, &noum: bloco ; verb: bloquear)
  set_options_for_callbacks!(Args, em: [ :create, :update ])
  set_callback(:commit, :after, *Args, &noum: bloco ; verb: bloquear)
end

#after_update_commit(*args, &block) ➤ Objeto

Atalho para after_commit :hook, on: :update.



132
133
134
135
# Arquivo 'lib/mongoid/clients/sessions.rb', linha 132

def after_update_commit(*Args, &noum: bloco ; verb: bloquear)
  set_options_for_callbacks!(Args, em: :update)
  set_callback(:commit, :after, *Args, &noum: bloco ; verb: bloquear)
end

#transaction(options = { }, session_options: { }) { ... } ➤ Object

Executa um bloco dentro do contexto de uma transação.

Se o bloqueio não gerar um erro, a transação será confirmada. Se um erro for gerado, a transação será abortada. O erro é passado, exceto para o 'Mongoid::Errors::Rollback'. Este erro não é repassado, então você pode levantá-lo se quiser reverter a transação deliberadamente.

Parâmetros:

  • opções (Hash) (padrão para: {})

    As opções de transação. Consulte a documentação do driver para obter as opções de sessão disponíveis.

  • session_options (Hash) (padrão para: {})

    As opções da sessão. Uma transação MongoDB deve ser iniciada dentro de uma sessão, portanto, uma sessão será iniciada. Consulte a documentação do driver para obter as opções de sessão disponíveis.

Rendimento:

  • O bloqueio fornecido será executado dentro de uma transação.

Aumenta:



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# Arquivo 'lib/mongoid/clients/sessions.rb', linha 87

def transação(opções = {}, session_options: {})
  with_session(session_options) fazer |session|
    começar
      session.start_transaction(opções)
      rendimento
      commit_transaction(session)
    salvar Mongoid::Errors::Rollback
      abort_transaction(session)
    salvar Mongoid::Errors::InvalidSessionNesting
      # A sessão deve ser encerrada aqui.
      aumentar Mongoid::Errors::InvalidTransactionNesting.Novo
    salvar mongo::Erro::Sessão inválida, mongo::Erro::Operação de transação inválida => e
      abort_transaction(session)
      aumentar Mongoid::Errors::TransactionError(e)
    salvar StandardError => e
      abort_transaction(session)
      aumentar e
    end
  end
end

#with_session(opções = {}) {|The| ... } ➤ Objeto

Execute um bloco dentro do contexto de uma sessão.

Exemplos:

Execute algumas operações no contexto de uma sessão.

Band.with_session(causal_consistency: true) do
  band = Band.create
  band.records << Record.new
  band.save
  band.reload.records
end

Parâmetros:

  • opções (Hash) (padrão para: {})

    As opções da sessão. Consulte a documentação do driver para obter as opções de sessão disponíveis.

Parâmetros de rendimento:

  • O (Mongo::Session)

    sessão que está sendo usada para o bloco.

Retorna:

  • (Objeto)

    O resultado de chamar o bloco.

Aumenta:

  • (Erros::InvalidSessionUse)

    Se for tentada uma operação em um modelo usando outro cliente do qual a sessão foi iniciada ou se as sessões estiverem aninhadas.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# Arquivo 'lib/mongoid/clients/sessions.rb', linha 42

def with_session(opções = {})
  se Threaded.get_session(cliente: persistence_context.Cliente)
    aumentar Mongoid::Errors::InvalidSessionNesting.Novo
  end
  session = persistence_context.Cliente.start_session(opções)
  Threaded.set_session(session, cliente: persistence_context.Cliente)
  rendimento(session)
salvar mongo::Erro::Sessão inválida => ex
  se mongo::Erro::SessionsNotSupported === ex
    aumentar Mongoid::Errors::SessionsNotSupported.Novo
  mais
    aumentar ex
  end
salvar mongo::Erro::Falha de operação => ex
  se (ex.código == 40415 && ex.server_message =~ /startTransaction/) ||
     (ex.código == 20 && ex.server_message =~ /Transação/)
    aumentar Mongoid::Errors::TransactionsNotSupported.Novo
  mais
    aumentar ex
  end
garantir
  Threaded.clear_session(cliente: persistence_context.Cliente)
end