class Locksy::BaseLock

Attributes

_clock[W]

allow injection of a clock to assist testing do not call or set this outside of tests

default_expiry[R]
default_extension[R]
lock_name[R]
logger[W]
owner[R]

Public Class Methods

new(lock_name: generate_default_lock_name, owner: generate_default_owner, default_expiry: 10, default_extension: 10, logger: nil, **_args) click to toggle source
# File lib/locksy/base_lock.rb, line 19
def initialize(lock_name: generate_default_lock_name, owner: generate_default_owner,
  default_expiry: 10, default_extension: 10, logger: nil, **_args)
  @owner = owner
  @default_expiry = default_expiry
  @default_extension = default_extension
  @lock_name = lock_name
  @logger = logger
end
shutting_down?() click to toggle source
# File lib/locksy/base_lock.rb, line 46
def self.shutting_down?
  @_shutting_down
end

Public Instance Methods

obtain_lock(expire_after: default_expiry, **_args) click to toggle source

disabling here because we have a no-op implementation… we're expecting this class to be extended rubocop:disable Style/EmptyMethod

# File lib/locksy/base_lock.rb, line 31
def obtain_lock(expire_after: default_expiry, **_args); end
refresh_lock(expire_after: default_extension, **_args) click to toggle source
# File lib/locksy/base_lock.rb, line 33
def refresh_lock(expire_after: default_extension, **_args); end
release_lock(**_args) click to toggle source
# File lib/locksy/base_lock.rb, line 35
def release_lock(**_args); end
with_lock(expire_after: default_expiry, **args) { || ... } click to toggle source

rubocop:enable Style/EmptyMethod

# File lib/locksy/base_lock.rb, line 38
def with_lock(expire_after: default_expiry, **args)
  if (lock_obtained = obtain_lock(expire_after: expire_after, **args))
    yield
  end
ensure
  release_lock if lock_obtained
end

Protected Instance Methods

expiry(after) click to toggle source
# File lib/locksy/base_lock.rb, line 64
def expiry(after)
  now + after
end
generate_default_lock_name() click to toggle source
# File lib/locksy/base_lock.rb, line 72
def generate_default_lock_name
  "#{SecureRandom.base64(12)}.#{generate_default_owner}"
end
generate_default_owner() click to toggle source
# File lib/locksy/base_lock.rb, line 68
def generate_default_owner
  "#{Thread.current.object_id}-#{Process.pid}@#{Socket.gethostname}"
end
logger() click to toggle source
# File lib/locksy/base_lock.rb, line 60
def logger
  @logger || Locksy.logger
end
now() click to toggle source
# File lib/locksy/base_lock.rb, line 56
def now
  (@_clock ||= Time).now.to_f
end