Sha256: 3e5c7e321a5302a6eb318b6b176042fb254dc63df77ecfe18e37a010b2c2ddb2
Contents?: true
Size: 1.72 KB
Versions: 4
Compression:
Stored size: 1.72 KB
Contents
# Copyright: Copyright (c) 2004 Nicolas Despres. All rights reserved. # Author: Nicolas Despres <polrop@lrde.epita.fr>. # License: Gnu General Public License. # $LastChangedBy: polrop $ # $Id: io_marshal.rb 63 2004-12-06 13:09:14Z polrop $ class IO def dump(*objs) objs.each do |obj| data = Marshal.dump(obj) write(data.size.to_s) write("\0") write(data) end end def load(num_objs=nil, non_block=false) objs = [] n = num_objs begin return nil if eof? and non_block objs << load_one_object(non_block) unless n.nil? n -= 1 break if n <= 0 end end until eof? objs end def load_one_object(non_block=false) size = '' while (c = read(1)) != "\0" do if c.nil? if non_block return nil else sleep(0.1) redo end end size += c end size = size.to_i data = read(size) Marshal.load(data) end end # class IO # # Unit test suite # if defined? TEST_MODE or $0 == __FILE__ require 'test/unit/ui/yaml/testrunner' class IOMarshalTest < Test::Unit::TestCase # # Tests # def test_simple obj1 = 12 obj2 = 'hello' obj3 = { 'a' => 12, 'b' => 42 } rd, wr = IO.pipe if pid = fork # father wr.close o1, o2 = rd.load(2) assert_equal(obj1, o1) assert_equal(obj2, o2) o3 = rd.load assert_equal([obj3], o3) assert_equal(nil, rd.load(4, true)) assert_equal(nil, rd.load_one_object(true)) Process.waitpid(pid) rd.close else # son rd.close sleep(0.5) wr.dump(obj1) wr.dump(obj2, obj3) wr.close exit end end end # class IOMarshalTest end
Version data entries
4 entries across 4 versions & 2 rubygems
Version | Path |
---|---|
ttk-0.1.576 | ruby_ex/io_marshal.rb |
ttk-0.1.579 | ruby_ex/io_marshal.rb |
ttk-0.1.580 | ruby_ex/io_marshal.rb |
vcs-0.2.148 | ruby_ex/io_marshal.rb |