Module: Mongoid::Clients::Sessions
- Included in:
- Mongoid::Clients, Mongoid::Criteria
- Defined in:
- lib/mongoid/clients/sessions.rb
Overview
Encapsulates behavior for getting a session from the client of a model class or instance, setting the session on the current thread, and yielding to a block. The session will be closed after the block completes or raises an error.
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#with_session(options = {}) {|The| ... } ⇒ Object
Execute a block within the context of a session.
Instance Method Details
#with_session(options = {}) {|The| ... } ⇒ Object
You cannot do any operations in the block using models or objects that use a different client; the block will execute all operations in the context of the implicit session and operations on any models using another client will fail. For example, if you set a client using store_in on a particular model and execute an operation on it in the session context block, that operation can’t use the block’s session and an error will be raised. An error will also be raised if sessions are nested.
Execute a block within the context of a session.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/mongoid/clients/sessions.rb', line 38 def with_session( = {}) if Threaded.get_session raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_nesting) end session = persistence_context.client.start_session() Threaded.set_session(session) yield(session) rescue Mongo::Error::InvalidSession => ex if # Driver 2.13.0+ defined?(Mongo::Error::SessionsNotSupported) && Mongo::Error::SessionsNotSupported === ex || # Legacy drivers ex. == Mongo::Session::SESSIONS_NOT_SUPPORTED then raise Mongoid::Errors::InvalidSessionUse.new(:sessions_not_supported) end raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_use) ensure Threaded.clear_session end |