class Wyrm::Hole::Mouth
This pretends to be just enough of an IO that we can use a queue to connect a dump to a restore.
Named for the mouth of a wormhole. Cos finding a good name for it is hard.
Constants
- DEFAULT_QUEUE_SIZE
Public Class Methods
new( queue_size: DEFAULT_QUEUE_SIZE)
click to toggle source
# File lib/wyrm/hole.rb, line 37 def initialize( queue_size: DEFAULT_QUEUE_SIZE) raise '>= ruby-2.3.0 needed because we use Queue#close' if RUBY_VERSION < '2.3.0' @queue_size = queue_size end
Public Instance Methods
deq()
click to toggle source
# File lib/wyrm/hole.rb, line 61 def deq queue.deq or raise StopIteration rescue StopIteration raise "nil from deq, but queue not empty" unless queue.empty? raise end
enq( value )
click to toggle source
interface for codec
# File lib/wyrm/hole.rb, line 59 def enq( value ); queue.enq value end
eof?()
click to toggle source
eof after flush has been called and queue is empty.
# File lib/wyrm/hole.rb, line 72 def eof?; queue.closed? && queue.empty? end
flush()
click to toggle source
this gets called by pump after dump is finished
# File lib/wyrm/hole.rb, line 75 def flush; queue.close end
queue()
click to toggle source
queue could be empty while producer is generating something, use a SizedQueue so we don't run out of memory during a big transfer
# File lib/wyrm/hole.rb, line 53 def queue @queue ||= SizedQueue.new @queue_size end
reset()
click to toggle source
interface for Hole
# File lib/wyrm/hole.rb, line 44 def reset if @queue @queue.close.clear @queue = nil end end