module Mongoid::UnitOfWork

This module handles unit of work functionality with regards to the identity map.

Public Instance Methods

unit_of_work(options = {}) { || ... } click to toggle source

We can process a unit of work in Mongoid and have the identity map automatically clear itself out after the work is complete.

@example Process a unit of work.

Mongoid.unit_of_work do
  Person.create(title: "Sir")
end

@example Process with identity map disabled on the current thread.

Mongoid.unit_of_work(disable: :current) do
  Person.create(title: "Sir")
end

@example Process with identity map disabled on all threads.

Mongoid.unit_of_work(disable: :all) do
  Person.create(title: "Sir")
end

@param [ Hash ] options The disabling options.

@option [ Symbol ] :disable Either :all or :current to indicate whether

to temporarily disable the identity map on the current thread or all
threads.

@return [ Object ] The result of the block.

@since 2.1.0

# File lib/mongoid/unit_of_work.rb, line 35
def unit_of_work(options = {})
  disable = options[:disable]
  begin
    Threaded.disable_identity_map(disable) if disable
    yield if block_given?
  ensure
    if disable
      Threaded.enable_identity_map(disable)
    else
      IdentityMap.clear
    end
  end
end
using_identity_map?() click to toggle source

Are we currently using the identity map?

@example Is the identity map currently enabled?

Mongoid.using_identity_map?

@return [ true, false ] If the identity map is in use.

@since 3.0.0

# File lib/mongoid/unit_of_work.rb, line 57
def using_identity_map?
  Mongoid.identity_map_enabled? && Threaded.identity_map_enabled?
end