io/stderr_wrapper_answers_write_through_method_missing.rb

tests/_examples/io/stderr_wrapper_answers_write_through_method_missing.rb in the metorex repository.

class StreamWrapper
  def initialize(stream)
    @stream = stream
  end

  def method_missing(name, *arguments, &block)
    @stream.__send__(name, *arguments, &block)
  end

  def respond_to_missing?(name, include_private = false)
    @stream.respond_to?(name, include_private) || super
  end
end

original = $stderr
$stderr = StreamWrapper.new($stdout)
$stderr.write("written through the wrapper\n")
$stderr = original

begin
  $stderr = Class.new.new
rescue TypeError => error
  puts error.message.sub(/0x\h+/, "0x")
end

Output:

written through the wrapper
$stderr must have write method, #<Class:0x> given