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