/ Published in: Ruby
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
# 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