class BioDSL::Serializer

Class for serializing and de-serializing data using Marshal.

Public Class Methods

new(io, &block) click to toggle source

Constructor for serializer.

@param io [IO] IO object. @param block [Proc] Block context.

@raise [SerializerError] if no block given.

@return [Serializer] class instance.

# File lib/BioDSL/serializer.rb, line 45
def initialize(io, &block)
  @io = io

  fail SerializerError, 'No block given' unless block

  block.call(self)
end

Public Instance Methods

<<(obj) click to toggle source

Method to write serialized data using Marshal to a given IO.

@param obj [Object] Object to serialize.

@example

File.open("foo.dat", 'wb') do |io|
  BioDSL::Serializer.new(io) do |s|
    s << {"foo": 0}
    s << {"bar": 1}
  end
end
# File lib/BioDSL/serializer.rb, line 64
def <<(obj)
  data = Marshal.dump(obj)
  @io.write([data.size].pack('N'))
  @io.write(data)
end
Also aliased as: writei
each() { |next_entry until eof?| ... } click to toggle source

Iterator for reading and de-serialized data from a given IO.

@example

File.open("foo.dat", 'rb') do |io|
  BioDSL::Serializer.new(io) do |s|
    s.each do |record|
      puts record
    end
  end
end

@yield [Object]

# File lib/BioDSL/serializer.rb, line 84
def each
  yield next_entry until @io.eof?
end
next_entry() click to toggle source

Read next entry from serialized stream.

@return [Object] Deserialized Object.

# File lib/BioDSL/serializer.rb, line 91
def next_entry
  size = @io.read(4)
  fail EOFError unless size
  data = @io.read(size.unpack('N').first)
  Marshal.load(data)
end
writei(obj)
Alias for: <<