class Flic::Blocker
Attributes
rejection_value[R]
Public Class Methods
new()
click to toggle source
# File lib/flic/blocker.rb, line 9 def initialize @semaphore = Mutex.new @queues = [] @rejection_value = nil end
Public Instance Methods
block_until_callback() { |proc| ... }
click to toggle source
# File lib/flic/blocker.rb, line 15 def block_until_callback queue = Queue.new begin @semaphore.synchronize do if @queues.frozen? raise *rejection_value else @queues << queue end end yield proc { |value| queue << [:resolve, value] } control, value = queue.pop case control when :resolve value when :reject raise *rejection_value end ensure @semaphore.synchronize do unless @queues.frozen? @queues.delete queue end end end end
unblock_all!(*rejection_value)
click to toggle source
# File lib/flic/blocker.rb, line 46 def unblock_all!(*rejection_value) @semaphore.synchronize do unless @queues.frozen? @rejection_value = rejection_value @queues.each { |queue| queue << [:reject, *rejection_value] }.clear @queues.freeze freeze end end end