class Moneta::Lock

Locks the underlying stores with a Mutex @api public

Public Class Methods

new(adapter, options = {}) click to toggle source

@param [Moneta store] adapter The underlying store @param [Hash] options @option options [String] :mutex (::Mutex.new) Mutex object

Calls superclass method
# File lib/moneta/lock.rb, line 10
def initialize(adapter, options = {})
  super
  @lock = options[:mutex] || ::Mutex.new
end

Protected Instance Methods

lock!(&block) click to toggle source
# File lib/moneta/lock.rb, line 34
def lock!(&block)
  locks << @lock
  @lock.synchronize(&block)
ensure
  locks.delete @lock
end
locked?() click to toggle source
# File lib/moneta/lock.rb, line 41
def locked?
  locks.include? @lock
end
locks() click to toggle source
# File lib/moneta/lock.rb, line 30
def locks
  Thread.current.thread_variable_get('Moneta::Lock')
end
locks=(locks) click to toggle source
# File lib/moneta/lock.rb, line 26
def locks=(locks)
  Thread.current.thread_variable_set('Moneta::Lock', locks)
end
wrap(name, *args) { || ... } click to toggle source
# File lib/moneta/lock.rb, line 17
def wrap(name, *args, &block)
  self.locks ||= Set.new
  if locked?
    yield
  else
    lock!(&block)
  end
end