Module: Mongoid::Threaded
- Extended by:
- Threaded
- Included in:
- Threaded
- Defined in:
- lib/mongoid/threaded.rb,
lib/mongoid/threaded/lifecycle.rb
Overview
This module contains logic for easy access to objects that have a lifecycle on the current thread.
Defined Under Namespace
Modules: Lifecycle
Constant Summary collapse
- DATABASE_OVERRIDE_KEY =
"[mongoid]:db-override"
- CLIENTS_KEY =
Constant for the key to store clients.
"[mongoid]:clients"
- CLIENT_OVERRIDE_KEY =
The key to override the client.
"[mongoid]:client-override"
- CURRENT_SCOPE_KEY =
The key for the current thread’s scope stack.
"[mongoid]:current-scope"
- AUTOSAVES_KEY =
"[mongoid]:autosaves"
- VALIDATIONS_KEY =
"[mongoid]:validations"
- STACK_KEYS =
Hash.new do |hash, key| hash[key] = "[mongoid]:#{key}-stack" end
- EXECUTE_CALLBACKS =
The key storing the default value for whether or not callbacks are executed on documents.
'[mongoid]:execute-callbacks'
- BIND =
'bind'.freeze
- ASSIGN =
'assign'.freeze
- BUILD =
'build'.freeze
- LOAD =
'load'.freeze
- CREATE =
'create'.freeze
Instance Method Summary collapse
-
#autosaved?(document) ⇒ true | false
Is the document autosaved on the current thread?.
-
#autosaves ⇒ Hash
Get all autosaves on the current thread.
-
#autosaves_for(klass) ⇒ Array
Get all autosaves on the current thread for the class.
-
#begin_autosave(document) ⇒ Object
Begin autosaving a document on the current thread.
-
#begin_execution(name) ⇒ true
Begin entry into a named thread local stack.
-
#begin_validate(document) ⇒ Object
Begin validating a document on the current thread.
-
#begin_without_default_scope(klass) ⇒ Object
private
Begin suppressing default scopes for given model on the current thread.
-
#clear_session ⇒ nil
Clear the cached session for this thread.
-
#client_override ⇒ String | Symbol
Get the global client override.
-
#client_override=(name) ⇒ String | Symbol
Set the global client override.
-
#current_scope(klass = nil) ⇒ Criteria
Get the current Mongoid scope.
-
#current_scope=(scope) ⇒ Criteria
Set the current Mongoid scope.
-
#database_override ⇒ String | Symbol
Get the global database override.
-
#database_override=(name) ⇒ String | Symbol
Set the global database override.
-
#execute_callbacks=(flag) ⇒ Object
Indicates whether document callbacks should be invoked by default for the current thread.
-
#execute_callbacks? ⇒ true | false
Queries whether document callbacks should be executed by default for the current thread.
-
#executing?(name) ⇒ true
Are in the middle of executing the named stack.
-
#exit_autosave(document) ⇒ Object
Exit autosaving a document on the current thread.
-
#exit_execution(name) ⇒ true
Exit from a named thread local stack.
-
#exit_validate(document) ⇒ Object
Exit validating a document on the current thread.
-
#exit_without_default_scope(klass) ⇒ Object
private
Exit suppressing default scopes for given model on the current thread.
-
#get_session ⇒ Mongo::Session | nil
Get the cached session for this thread.
-
#set_current_scope(scope, klass) ⇒ Criteria
Set the current Mongoid scope.
-
#set_session(session) ⇒ Object
Cache a session for this thread.
-
#stack(name) ⇒ Array
Get the named stack.
-
#validated?(document) ⇒ true | false
Is the document validated on the current thread?.
-
#validations ⇒ Hash
Get all validations on the current thread.
-
#validations_for(klass) ⇒ Array
Get all validations on the current thread for the class.
-
#without_default_scope?(klass) ⇒ Boolean
private
Is the given klass’ default scope suppressed on the current thread?.
Instance Method Details
#autosaved?(document) ⇒ true | false
Is the document autosaved on the current thread?
263 264 265 |
# File 'lib/mongoid/threaded.rb', line 263 def autosaved?(document) autosaves_for(document.class).include?(document._id) end |
#autosaves ⇒ Hash
Get all autosaves on the current thread.
285 286 287 |
# File 'lib/mongoid/threaded.rb', line 285 def autosaves Thread.current[AUTOSAVES_KEY] ||= {} end |
#autosaves_for(klass) ⇒ Array
Get all autosaves on the current thread for the class.
307 308 309 |
# File 'lib/mongoid/threaded.rb', line 307 def autosaves_for(klass) autosaves[klass] ||= [] end |
#begin_autosave(document) ⇒ Object
Begin autosaving a document on the current thread.
111 112 113 |
# File 'lib/mongoid/threaded.rb', line 111 def begin_autosave(document) autosaves_for(document.class).push(document._id) end |
#begin_execution(name) ⇒ true
Begin entry into a named thread local stack.
43 44 45 |
# File 'lib/mongoid/threaded.rb', line 43 def begin_execution(name) stack(name).push(true) end |
#begin_validate(document) ⇒ Object
Begin validating a document on the current thread.
121 122 123 |
# File 'lib/mongoid/threaded.rb', line 121 def begin_validate(document) validations_for(document.class).push(document._id) end |
#begin_without_default_scope(klass) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Begin suppressing default scopes for given model on the current thread.
153 154 155 |
# File 'lib/mongoid/threaded.rb', line 153 def begin_without_default_scope(klass) stack(:without_default_scope).push(klass) end |
#clear_session ⇒ nil
Clear the cached session for this thread.
348 349 350 351 352 |
# File 'lib/mongoid/threaded.rb', line 348 def clear_session session = get_session session.end_session if session Thread.current["[mongoid]:session"] = nil end |
#client_override ⇒ String | Symbol
Get the global client override.
175 176 177 |
# File 'lib/mongoid/threaded.rb', line 175 def client_override Thread.current[CLIENT_OVERRIDE_KEY] end |
#client_override=(name) ⇒ String | Symbol
Set the global client override.
187 188 189 |
# File 'lib/mongoid/threaded.rb', line 187 def client_override=(name) Thread.current[CLIENT_OVERRIDE_KEY] = name end |
#current_scope(klass = nil) ⇒ Criteria
Get the current Mongoid scope.
200 201 202 203 204 205 206 207 208 |
# File 'lib/mongoid/threaded.rb', line 200 def current_scope(klass = nil) if klass && Thread.current[CURRENT_SCOPE_KEY].respond_to?(:keys) Thread.current[CURRENT_SCOPE_KEY][ Thread.current[CURRENT_SCOPE_KEY].keys.find { |k| k <= klass } ] else Thread.current[CURRENT_SCOPE_KEY] end end |
#current_scope=(scope) ⇒ Criteria
Set the current Mongoid scope.
218 219 220 |
# File 'lib/mongoid/threaded.rb', line 218 def current_scope=(scope) Thread.current[CURRENT_SCOPE_KEY] = scope end |
#database_override ⇒ String | Symbol
Get the global database override.
53 54 55 |
# File 'lib/mongoid/threaded.rb', line 53 def database_override Thread.current[DATABASE_OVERRIDE_KEY] end |
#database_override=(name) ⇒ String | Symbol
Set the global database override.
65 66 67 |
# File 'lib/mongoid/threaded.rb', line 65 def database_override=(name) Thread.current[DATABASE_OVERRIDE_KEY] = name end |
#execute_callbacks=(flag) ⇒ Object
Indicates whether document callbacks should be invoked by default for the current thread. Individual documents may further override the callback behavior, but this will be used for the default behavior.
376 377 378 |
# File 'lib/mongoid/threaded.rb', line 376 def execute_callbacks=(flag) Thread.current[EXECUTE_CALLBACKS] = flag end |
#execute_callbacks? ⇒ true | false
Queries whether document callbacks should be executed by default for the current thread.
Unless otherwise indicated (by #execute_callbacks=), this will return true.
362 363 364 365 366 367 368 |
# File 'lib/mongoid/threaded.rb', line 362 def execute_callbacks? if Thread.current.key?(EXECUTE_CALLBACKS) Thread.current[EXECUTE_CALLBACKS] else true end end |
#executing?(name) ⇒ true
Are in the middle of executing the named stack
77 78 79 |
# File 'lib/mongoid/threaded.rb', line 77 def executing?(name) !stack(name).empty? end |
#exit_autosave(document) ⇒ Object
Exit autosaving a document on the current thread.
131 132 133 |
# File 'lib/mongoid/threaded.rb', line 131 def exit_autosave(document) autosaves_for(document.class).delete_one(document._id) end |
#exit_execution(name) ⇒ true
Exit from a named thread local stack.
89 90 91 |
# File 'lib/mongoid/threaded.rb', line 89 def exit_execution(name) stack(name).pop end |
#exit_validate(document) ⇒ Object
Exit validating a document on the current thread.
141 142 143 |
# File 'lib/mongoid/threaded.rb', line 141 def exit_validate(document) validations_for(document.class).delete_one(document._id) end |
#exit_without_default_scope(klass) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Exit suppressing default scopes for given model on the current thread.
165 166 167 |
# File 'lib/mongoid/threaded.rb', line 165 def exit_without_default_scope(klass) stack(:without_default_scope).delete(klass) end |
#get_session ⇒ Mongo::Session | nil
Get the cached session for this thread.
338 339 340 |
# File 'lib/mongoid/threaded.rb', line 338 def get_session Thread.current["[mongoid]:session"] end |
#set_current_scope(scope, klass) ⇒ Criteria
Set the current Mongoid scope. Safe for multi-model scope chaining.
231 232 233 234 235 236 237 238 239 240 241 |
# File 'lib/mongoid/threaded.rb', line 231 def set_current_scope(scope, klass) if scope.nil? if Thread.current[CURRENT_SCOPE_KEY] Thread.current[CURRENT_SCOPE_KEY].delete(klass) Thread.current[CURRENT_SCOPE_KEY] = nil if Thread.current[CURRENT_SCOPE_KEY].empty? end else Thread.current[CURRENT_SCOPE_KEY] ||= {} Thread.current[CURRENT_SCOPE_KEY][klass] = scope end end |
#set_session(session) ⇒ Object
Cache a session for this thread.
328 329 330 |
# File 'lib/mongoid/threaded.rb', line 328 def set_session(session) Thread.current["[mongoid]:session"] = session end |
#stack(name) ⇒ Array
Get the named stack.
101 102 103 |
# File 'lib/mongoid/threaded.rb', line 101 def stack(name) Thread.current[STACK_KEYS[name]] ||= [] end |
#validated?(document) ⇒ true | false
Is the document validated on the current thread?
275 276 277 |
# File 'lib/mongoid/threaded.rb', line 275 def validated?(document) validations_for(document.class).include?(document._id) end |
#validations ⇒ Hash
Get all validations on the current thread.
295 296 297 |
# File 'lib/mongoid/threaded.rb', line 295 def validations Thread.current[VALIDATIONS_KEY] ||= {} end |
#validations_for(klass) ⇒ Array
Get all validations on the current thread for the class.
318 319 320 |
# File 'lib/mongoid/threaded.rb', line 318 def validations_for(klass) validations[klass] ||= [] end |
#without_default_scope?(klass) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Is the given klass’ default scope suppressed on the current thread?
251 252 253 |
# File 'lib/mongoid/threaded.rb', line 251 def without_default_scope?(klass) stack(:without_default_scope).include?(klass) end |