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