module Osbourne::Locks::Base

Constants

DEFAULT_HARD_TTL
DEFAULT_SOFT_TTL

Attributes

hard_ttl[RW]
soft_ttl[RW]

Public Class Methods

new(options={}) click to toggle source
# File lib/osbourne/locks/base.rb, line 13
def initialize(options={})
  self.soft_ttl = options.fetch(:soft_ttl, DEFAULT_SOFT_TTL)
  self.hard_ttl = options.fetch(:hard_ttl, DEFAULT_HARD_TTL)
end

Public Instance Methods

hard_lock(id) click to toggle source
# File lib/osbourne/locks/base.rb, line 22
def hard_lock(id)
  lock!(lock_key(id), hard_ttl)
end
soft_lock(id) click to toggle source
# File lib/osbourne/locks/base.rb, line 18
def soft_lock(id)
  lock(lock_key(id), soft_ttl)
end
try_with_lock(id, hard_lock: false) { || ... } click to toggle source
# File lib/osbourne/locks/base.rb, line 30
def try_with_lock(id, hard_lock: false)
  if lock(lock_key(id), soft_ttl)
    begin
      yield
      unlock(id)
    rescue => e # rubocop:disable Style/RescueStandardError
      unlock(id)
      raise e
    end

    hard_lock(id) if hard_lock
    true
  else
    false
  end
end
unlock(id) click to toggle source
# File lib/osbourne/locks/base.rb, line 26
def unlock(id)
  unlock!(lock_key(id))
end

Protected Instance Methods

lock(_key, _ttl) click to toggle source
# File lib/osbourne/locks/base.rb, line 49
def lock(_key, _ttl)
  raise NotImplementedError
end
lock!(_key, _ttl) click to toggle source
# File lib/osbourne/locks/base.rb, line 53
def lock!(_key, _ttl)
  raise NotImplementedError
end
unlock!(_key) click to toggle source
# File lib/osbourne/locks/base.rb, line 57
def unlock!(_key)
  raise NotImplementedError
end

Private Instance Methods

lock_key(id) click to toggle source
# File lib/osbourne/locks/base.rb, line 65
def lock_key(id)
  "osbourne:lock:#{id}"
end