Class: Async::Locked
Constant Summary
Constants inherited from Async
Class Method Summary collapse
- .make_lock_name(receiver) ⇒ Object
- .run_later(job_class, receiver, method_name, *args) ⇒ Object
- .run_now(receiver, method_name, args) ⇒ Object
Methods inherited from Async
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 |