Return to Snippet

Revision: 9746
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