Module: Mongoid::Clients::Sessions
Relationships & Source Files | |
Namespace Children | |
Modules:
| |
Extension / Inclusion / Inheritance Descendants | |
Included In:
| |
Defined in: | lib/mongoid/clients/sessions.rb |
Overview
Encapsulates behavior for using sessions and transactions.
Class Method Summary
-
.included(base)
Add class method mixin functionality.
Instance Method Summary
-
#ensure_client_compatibility!
private
If at least one session is active, this ensures that the current model’s client is compatible with one of them.
Class Method Details
.included(base)
TODO:
Replace with ActiveSupport::Concern
Add class method mixin functionality.
# File 'lib/mongoid/clients/sessions.rb', line 13
def self.included(base) base.include(ClassMethods) end
Instance Method Details
#ensure_client_compatibility! (private)
If at least one session is active, this ensures that the current model’s client is compatible with one of them.
“Compatible” is defined to mean: the same client was used to open one of the active sessions.
Currently emits a warning.
# File 'lib/mongoid/clients/sessions.rb', line 263
def ensure_client_compatibility! # short circuit: if no sessions are active, there's nothing # to check. return unless Threaded.sessions.any? # at this point, we know that at least one session is currently # active. let's see if one of them was started with the model's # client... session = Threaded.get_session(client: persistence_context.client) # if not, then we have a case of the programmer trying to use # a model within a transaction, where the model is not itself # controlled by that transaction. this is potentially a bug, so # let's tell them about it. if session.nil? # This is hacky; we're hijacking Mongoid::Errors::MongoidError in # order to get the spiffy error message translation. If we later # decide to raise an error instead of just writing a message, we can # subclass MongoidError and raise that exception here. = Errors::MongoidError.new. ( 'client_session_mismatch', model: self.class.name ) logger.info( ) end end