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

Instance Method Summary collapse

Instance Method Details

#autosaved?(document) ⇒ true, false

Is the document autosaved on the current thread?

Examples:

Is the document autosaved?

Threaded.autosaved?(doc)

Parameters:

  • document (Document)

    The document to check.

Returns:

  • (true, false)

    If the document is autosaved.

Since:

  • 2.1.9



358
359
360
# File 'lib/mongoid/threaded.rb', line 358

def autosaved?(document)
  autosaves_for(document.class).include?(document.id)
end

#autosavesHash

Get all autosaves on the current thread.

Examples:

Get all autosaves.

Threaded.autosaves

Returns:

  • (Hash)

    The current autosaves.

Since:

  • 3.0.0



384
385
386
# File 'lib/mongoid/threaded.rb', line 384

def autosaves
  Thread.current["[mongoid]:autosaves"] ||= {}
end

#autosaves_for(klass) ⇒ Array

Get all autosaves on the current thread for the class.

Examples:

Get all autosaves.

Threaded.autosaves_for(Person)

Parameters:

  • The (Class)

    class to check.

Returns:

  • (Array)

    The current autosaves.

Since:

  • 3.0.0



410
411
412
# File 'lib/mongoid/threaded.rb', line 410

def autosaves_for(klass)
  autosaves[klass] ||= []
end

#begin_autosave(document) ⇒ Object

Begin autosaving a document on the current thread.

Examples:

Begin autosave.

Threaded.begin_autosave(doc)

Parameters:

  • document (Document)

    The document to autosave.

Since:

  • 3.0.0



113
114
115
# File 'lib/mongoid/threaded.rb', line 113

def begin_autosave(document)
  autosaves_for(document.class).push(document.id)
end

#begin_execution(name) ⇒ true

Begin entry into a named thread local stack.

Examples:

Begin entry into the stack.

Threaded.begin_execution(:create)

Parameters:

  • name (String)

    The name of the stack

Returns:

  • (true)

    True.

Since:

  • 2.4.0



21
22
23
# File 'lib/mongoid/threaded.rb', line 21

def begin_execution(name)
  stack(name).push(true)
end

#begin_validate(document) ⇒ Object

Begin validating a document on the current thread.

Examples:

Begin validation.

Threaded.begin_validate(doc)

Parameters:

  • document (Document)

    The document to validate.

Since:

  • 2.1.9



125
126
127
# File 'lib/mongoid/threaded.rb', line 125

def begin_validate(document)
  validations_for(document.class).push(document.id)
end

#clear_persistence_options(klass) ⇒ true

Clear out all the persistence options.

Examples:

Clear out the persistence options.

Threaded.clear_persistence_options(Band)

Parameters:

  • klass (Class)

    The model class.

Returns:

  • (true)

    true.

Since:

  • 2.0.0



139
140
141
142
# File 'lib/mongoid/threaded.rb', line 139

def clear_persistence_options(klass)
  Thread.current["[mongoid][#{klass}]:persistence-options"] = nil
  true
end

#database_overrideString, Symbol

Get the global database override.

Examples:

Get the global database override.

Threaded.database_override

Returns:

  • (String, Symbol)

    The override.

Since:

  • 3.0.0



33
34
35
# File 'lib/mongoid/threaded.rb', line 33

def database_override
  Thread.current["[mongoid]:db-override"]
end

#database_override=(name) ⇒ String, Symbol

Set the global database override.

Examples:

Set the global database override.

Threaded.database_override = :testing

Parameters:

  • The (String, Symbol)

    global override name.

Returns:

  • (String, Symbol)

    The override.

Since:

  • 3.0.0



47
48
49
# File 'lib/mongoid/threaded.rb', line 47

def database_override=(name)
  Thread.current["[mongoid]:db-override"] = name
end

#delete_selection(criteria_instance_id) ⇒ Boolean

Delete the field selection on the current thread.

Examples:

Delete the field selection.

Threaded.delete_selection(Person)

Parameters:

  • criteria_instance_id (Integer)

    The criteria instance id.

Returns:

  • (Boolean)

    Whether there was a field selection.

Since:

  • 3.0.7



304
305
306
307
308
# File 'lib/mongoid/threaded.rb', line 304

def delete_selection(criteria_instance_id)
  selections = Thread.current["[mongoid][selections]"]
  return false unless selections
  !!selections.delete(criteria_instance_id)
end

#disable_identity_map(option) ⇒ Object

Disable the identity map on either the current thread or all threads.

Examples:

Disable the identity map on all threads.

Threaded.disable_identity_map(:all)

Disable the identity map on the current thread.

Threaded.disable_identity_map(:current)

Parameters:

  • option (Symbol)

    The disabling option.

Since:

  • 3.0.0



203
204
205
206
207
208
209
210
211
# File 'lib/mongoid/threaded.rb', line 203

def disable_identity_map(option)
  if option == :all
    Thread.list.each do |thread|
      thread["[mongoid]:identity-map-enabled"] = false
    end
  else
    Thread.current["[mongoid]:identity-map-enabled"] = false
  end
end

#enable_identity_map(option) ⇒ Object

Enable the identity map on either the current thread or all threads.

Examples:

Enable the identity map on all threads.

Threaded.enable_identity_map(:all)

Enable the identity map on the current thread.

Threaded.enable_identity_map(:current)

Parameters:

  • option (Symbol)

    The disabling option.

Since:

  • 3.0.0



224
225
226
227
228
229
230
231
232
# File 'lib/mongoid/threaded.rb', line 224

def enable_identity_map(option)
  if option == :all
    Thread.list.each do |thread|
      thread["[mongoid]:identity-map-enabled"] = true
    end
  else
    Thread.current["[mongoid]:identity-map-enabled"] = true
  end
end

#executing?(name) ⇒ true

Are in the middle of executing the named stack

Examples:

Are we in the stack execution?

Threaded.executing?(:create)

Parameters:

  • name (Symbol)

    The name of the stack

Returns:

  • (true)

    If the stack is being executed.

Since:

  • 2.4.0



73
74
75
# File 'lib/mongoid/threaded.rb', line 73

def executing?(name)
  !stack(name).empty?
end

#exit_autosave(document) ⇒ Object

Exit autosaving a document on the current thread.

Examples:

Exit autosave.

Threaded.exit_autosave(doc)

Parameters:

  • document (Document)

    The document to autosave.

Since:

  • 3.0.0



152
153
154
# File 'lib/mongoid/threaded.rb', line 152

def exit_autosave(document)
  autosaves_for(document.class).delete_one(document.id)
end

#exit_execution(name) ⇒ true

Exit from a named thread local stack.

Examples:

Exit from the stack.

Threaded.exit_execution(:create)

Parameters:

  • name (Symbol)

    The name of the stack

Returns:

  • (true)

    True.

Since:

  • 2.4.0



87
88
89
# File 'lib/mongoid/threaded.rb', line 87

def exit_execution(name)
  stack(name).pop
end

#exit_validate(document) ⇒ Object

Exit validating a document on the current thread.

Examples:

Exit validation.

Threaded.exit_validate(doc)

Parameters:

  • document (Document)

    The document to validate.

Since:

  • 2.1.9



164
165
166
# File 'lib/mongoid/threaded.rb', line 164

def exit_validate(document)
  validations_for(document.class).delete_one(document.id)
end

#identity_mapIdentityMap

Get the identity map off the current thread.

Examples:

Get the identity map.

Threaded.identity_map

Returns:

Since:

  • 2.1.0



176
177
178
# File 'lib/mongoid/threaded.rb', line 176

def identity_map
  Thread.current["[mongoid]:identity-map"] ||= IdentityMap.new
end

#identity_map_enabled?true, false

Is the identity map enabled on the current thread?

Examples:

Is the identity map enabled?

Threaded.identity_map_enabled?

Returns:

  • (true, false)

    If the identity map is enabled.

Since:

  • 3.0.0



188
189
190
# File 'lib/mongoid/threaded.rb', line 188

def identity_map_enabled?
  Thread.current["[mongoid]:identity-map-enabled"] != false
end

#persistence_options(klass) ⇒ Hash

Get the persistence options for the current thread.

Examples:

Get the persistence options.

Threaded.persistence_options(Band)

Parameters:

  • klass (Class)

    The model class.

Returns:

  • (Hash)

    The current persistence options.

Since:

  • 2.1.0



244
245
246
# File 'lib/mongoid/threaded.rb', line 244

def persistence_options(klass)
  Thread.current["[mongoid][#{klass}]:persistence-options"]
end

#scope_stackHash

Get the mongoid scope stack for chained criteria.

Examples:

Get the scope stack.

Threaded.scope_stack

Returns:

  • (Hash)

    The scope stack.

Since:

  • 2.1.0



344
345
346
# File 'lib/mongoid/threaded.rb', line 344

def scope_stack
  Thread.current["[mongoid]:scope-stack"] ||= {}
end

#selection(criteria_instance_id) ⇒ Hash

Get the field selection options from the current thread.

Examples:

Get the field selection options.

Threaded.selection

Parameters:

  • criteria_instance_id (Integer)

    The criteria instance id.

Returns:

  • (Hash)

    The field selection.

Since:

  • 2.4.4



273
274
275
276
# File 'lib/mongoid/threaded.rb', line 273

def selection(criteria_instance_id)
  selections = Thread.current["[mongoid][selections]"]
  selections[criteria_instance_id] if selections
end

#session_overrideString, Symbol

Get the global session override.

Examples:

Get the global session override.

Threaded.session_override

Returns:

  • (String, Symbol)

    The override.

Since:

  • 3.0.0



318
319
320
# File 'lib/mongoid/threaded.rb', line 318

def session_override
  Thread.current["[mongoid]:session-override"]
end

#session_override=(name) ⇒ String, Symbol

Set the global session override.

Examples:

Set the global session override.

Threaded.session_override = :testing

Parameters:

  • The (String, Symbol)

    global override name.

Returns:

  • (String, Symbol)

    The override.

Since:

  • 3.0.0



332
333
334
# File 'lib/mongoid/threaded.rb', line 332

def session_override=(name)
  Thread.current["[mongoid]:session-override"] = name
end

#sessionsHash

Get the database sessions from the current thread.

Examples:

Get the database sessions.

Threaded.sessions

Returns:

  • (Hash)

    The sessions.

Since:

  • 3.0.0



59
60
61
# File 'lib/mongoid/threaded.rb', line 59

def sessions
  Thread.current["[mongoid]:sessions"] ||= {}
end

#set_persistence_options(klass, options) ⇒ Hash

Set the persistence options on the current thread.

Examples:

Set the persistence options.

Threaded.set_persistence_options(Band, { safe: { fsync: true }})

Parameters:

  • klass (Class)

    The model class.

  • options (Hash)

    The persistence options.

Returns:

  • (Hash)

    The persistence options.

Since:

  • 2.1.0



259
260
261
# File 'lib/mongoid/threaded.rb', line 259

def set_persistence_options(klass, options)
  Thread.current["[mongoid][#{klass}]:persistence-options"] = options
end

#set_selection(criteria_instance_id, value) ⇒ Hash

Set the field selection on the current thread.

Examples:

Set the field selection.

Threaded.set_selection(Person, { field: 1 })

Parameters:

  • criteria_instance_id (Integer)

    The criteria instance id.

  • value (Hash)

    The current field selection.

Returns:

  • (Hash)

    The field selection.

Since:

  • 2.4.4



289
290
291
292
# File 'lib/mongoid/threaded.rb', line 289

def set_selection(criteria_instance_id, value)
  Thread.current["[mongoid][selections]"] ||= {}
  Thread.current["[mongoid][selections]"][criteria_instance_id] = value
end

#stack(name) ⇒ Array

Get the named stack.

Examples:

Get a stack by name

Threaded.stack(:create)

Parameters:

  • name (Symbol)

    The name of the stack

Returns:

  • (Array)

    The stack.

Since:

  • 2.4.0



101
102
103
# File 'lib/mongoid/threaded.rb', line 101

def stack(name)
  Thread.current["[mongoid]:#{name}-stack"] ||= []
end

#validated?(document) ⇒ true, false

Is the document validated on the current thread?

Examples:

Is the document validated?

Threaded.validated?(doc)

Parameters:

  • document (Document)

    The document to check.

Returns:

  • (true, false)

    If the document is validated.

Since:

  • 2.1.9



372
373
374
# File 'lib/mongoid/threaded.rb', line 372

def validated?(document)
  validations_for(document.class).include?(document.id)
end

#validationsHash

Get all validations on the current thread.

Examples:

Get all validations.

Threaded.validations

Returns:

  • (Hash)

    The current validations.

Since:

  • 2.1.9



396
397
398
# File 'lib/mongoid/threaded.rb', line 396

def validations
  Thread.current["[mongoid]:validations"] ||= {}
end

#validations_for(klass) ⇒ Array

Get all validations on the current thread for the class.

Examples:

Get all validations.

Threaded.validations_for(Person)

Parameters:

  • The (Class)

    class to check.

Returns:

  • (Array)

    The current validations.

Since:

  • 2.1.9



423
424
425
# File 'lib/mongoid/threaded.rb', line 423

def validations_for(klass)
  validations[klass] ||= []
end