class DRbQS::Worker::Serialize::Unpacker
Public Class Methods
new()
click to toggle source
# File lib/drbqs/worker/serialize.rb, line 7 def initialize @chunk = '' @next_size = nil end
Public Instance Methods
each() { |obj| ... }
click to toggle source
# File lib/drbqs/worker/serialize.rb, line 37 def each(&block) if block_given? while ary = next_object sym, obj = ary yield(obj) end else to_enum(:each) end end
feed(data)
click to toggle source
# File lib/drbqs/worker/serialize.rb, line 12 def feed(data) @chunk << data end
feed_each(data, &block)
click to toggle source
# File lib/drbqs/worker/serialize.rb, line 48 def feed_each(data, &block) feed(data) each(&block) end
Private Instance Methods
next_object()
click to toggle source
# File lib/drbqs/worker/serialize.rb, line 16 def next_object unless @next_size if @chunk.bytesize >= HEADER_BYTE_SIZE @chunk.force_encoding('BINARY') @next_size = @chunk[0, HEADER_BYTE_SIZE].unpack('N')[0] @chunk = @chunk[HEADER_BYTE_SIZE..-1] else return nil end end if @next_size && @chunk.bytesize >= @next_size data = @chunk[0, @next_size] @chunk = @chunk[@next_size..-1] @next_size = nil [:loaded, Marshal.load(data)] else nil end end