Module: DBLock::Lock
Instance Method Summary collapse
-
#get(name, timeout = 0) ⇒ Object
rubocop:disable Metrics/AbcSize.
-
#locked? ⇒ Boolean
rubocop:enable Metrics/AbcSize.
Instance Method Details
#get(name, timeout = 0) ⇒ Object
rubocop:disable Metrics/AbcSize
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/db_lock/lock.rb', line 8 def get(name, timeout = 0) timeout = timeout.to_f # catches nil timeout = 0 if timeout.negative? raise "Invalid lock name: #{name.inspect}" if name.empty? raise AlreadyLocked, 'Already lock in progress' if locked? name = generate_lock_name(name) if Adapter.lock(name, timeout) @locked = true yield else raise AlreadyLocked, "Unable to obtain lock '#{name}' within #{timeout} seconds" unless locked? end ensure Adapter.release(name) if locked? @locked = false end |
#locked? ⇒ Boolean
rubocop:enable Metrics/AbcSize
29 30 31 |
# File 'lib/db_lock/lock.rb', line 29 def locked? @locked ||= false end |