class Backports::Ractor::OutgoingQueue

Constants

TYPE
WrappedException

Public Class Methods

new() click to toggle source
Calls superclass method Backports::FilteredQueue.new
# File lib/backports/ractor/queues.rb, line 34
def initialize
  @ack_queue = ::Queue.new
  super
end

Public Instance Methods

close(how = :hard) click to toggle source
Calls superclass method Backports::FilteredQueue#close
# File lib/backports/ractor/queues.rb, line 47
def close(how = :hard)
  super()
  return if how == :soft

  clear
  @ack_queue.close
end
pop(timeout: nil, ack: true) click to toggle source
Calls superclass method Backports::FilteredQueue#pop
# File lib/backports/ractor/queues.rb, line 39
def pop(timeout: nil, ack: true)
  r = super(timeout: timeout)
  @ack_queue << :done if ack
  raise r.exception if WrappedException === r

  r
end
push(obj, ack:) click to toggle source
Calls superclass method Backports::FilteredQueue#push
# File lib/backports/ractor/queues.rb, line 55
def push(obj, ack:)
  super(obj)
  if ack
    r = @ack_queue.pop # block until popped
    raise ClosedError, "The #{self.class::TYPE}-port is already closed" unless r == :done
  end
  self
end