Module: WithAdvisoryLock::Concern::ClassMethods

Defined in:
lib/with_advisory_lock/concern.rb

Instance Method Summary collapse

Instance Method Details

#advisory_lock_exists?(lock_name) ⇒ Boolean

Returns:

  • (Boolean)


20
21
22
23
# File 'lib/with_advisory_lock/concern.rb', line 20

def advisory_lock_exists?(lock_name)
  impl = impl_class.new(connection, lock_name, 0)
  impl.already_locked? || !impl.yield_with_lock.lock_was_acquired?
end

#current_advisory_lockObject



25
26
27
28
# File 'lib/with_advisory_lock/concern.rb', line 25

def current_advisory_lock
  lock_stack_key = WithAdvisoryLock::Base.lock_stack.first
  lock_stack_key && lock_stack_key[0]
end

#with_advisory_lock(lock_name, options = {}, &block) ⇒ Object



9
10
11
12
# File 'lib/with_advisory_lock/concern.rb', line 9

def with_advisory_lock(lock_name, options = {}, &block)
  result = with_advisory_lock_result(lock_name, options, &block)
  result.lock_was_acquired? ? result.result : false
end

#with_advisory_lock_result(lock_name, options = {}, &block) ⇒ Object



14
15
16
17
18
# File 'lib/with_advisory_lock/concern.rb', line 14

def with_advisory_lock_result(lock_name, options = {}, &block)
  class_options = options.extract!(:force_nested_lock_support) if options.respond_to?(:fetch)
  impl = impl_class(class_options).new(connection, lock_name, options)
  impl.with_advisory_lock_if_needed(&block)
end