class Osbourne::Locks::Memory

Public Class Methods

semaphore() click to toggle source
# File lib/osbourne/locks/memory.rb, line 15
def semaphore
  @semaphore ||= Mutex.new
end
store() click to toggle source
# File lib/osbourne/locks/memory.rb, line 11
def store
  @store ||= {}
end

Protected Instance Methods

lock(key, ttl) click to toggle source
# File lib/osbourne/locks/memory.rb, line 22
def lock(key, ttl)
  reap

  store do |store|
    if store.key?(key)
      false
    else
      store[key] = Time.current + ttl
      true
    end
  end
end
lock!(key, ttl) click to toggle source
# File lib/osbourne/locks/memory.rb, line 35
def lock!(key, ttl)
  reap

  store do |store|
    store[key] = Time.current + ttl
  end
end
unlock!(key) click to toggle source
# File lib/osbourne/locks/memory.rb, line 43
def unlock!(key)
  store do |store|
    store.delete(key)
  end
end

Private Instance Methods

reap() click to toggle source
# File lib/osbourne/locks/memory.rb, line 57
def reap
  store do |store|
    now = Time.current
    store.delete_if {|_, expires_at| expires_at <= now }
  end
end
semaphore() click to toggle source
# File lib/osbourne/locks/memory.rb, line 64
def semaphore
  self.class.semaphore
end
store() { |class.store| ... } click to toggle source
# File lib/osbourne/locks/memory.rb, line 51
def store
  semaphore.synchronize do
    yield self.class.store
  end
end