Revision: 9746
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 19, 2008 20:48 by jluxenberg
Initial Code
# this will relay calls to multiple objects
#
# objects will be removed from the multiplexer when
# a call to them results in an exception
#
# I use it to multiplex input streams (see example below class)
class Multiplexer
def initialize(*args)
@streams = args
end
def method_missing(m, *args)
result = nil
while(t = @streams.shift)
begin
if(result = t.send(m,*args))
@streams.push(t)
return result
end
rescue
end
end
end
end
require 'open3'
Open3.popen3("ruby -e '$stderr.puts(\"foo\"); $stdout.puts(\"bar\"); $stderr.puts(\"baz\");'") do |input,output,error|
expected = ['foo','bar','baz']
input.close
f=Multiplexer.new(error,output)
while(line=f.gets)
if((e=expected.shift) != line.chomp) then
puts "ERROR: failed unit test; expected #{e}, got #{line.chomp}"
end
puts line
end
end
Initial URL
http://www.jaredlux.com/
Initial Description
Initial Title
Ruby Multiplexer - mash multiple objects together
Initial Tags
Initial Language
Ruby