Class: Async::Locked

Inherits:
Async
  • Object
show all
Defined in:
lib/async/locked.rb

Constant Summary

Constants inherited from Async

VERSION

Class Method Summary collapse

Methods inherited from Async

ensure_backend!, run

Class Method Details

.make_lock_name(receiver) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/async/locked.rb', line 33

def self.make_lock_name(receiver)
  if receiver.is_a?(Class)
    Lock.make_name(receiver.to_s, nil)
  else
    Lock.make_name(receiver.class.to_s, receiver.id)
  end
end

.run_later(job_class, receiver, method_name, *args) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/async/locked.rb', line 25

def self.run_later(job_class, receiver, method_name, *args)
  if lock = Lock.pass_on(make_lock_name(receiver))
    super(job_class, receiver, method_name, lock.as_job_arg, *args)
  else
    super
  end
end

.run_now(receiver, method_name, args) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/async/locked.rb', line 8

def self.run_now(receiver, method_name, args)
  Notifications.notify_job("consider", receiver, method_name, args)
  if Lock.is_lock_arg?(args.first)
    lock_arg = args.shift
    lock = Lock.claim(make_lock_name(receiver)) || Lock.create(make_lock_name(receiver))
  else
    lock = Lock.create(make_lock_name(receiver))
  end
  if lock
    super
  else
    run_later(self.to_s, receiver, method_name, *args)
  end
ensure
  lock && lock.release
end