How to redefine puts in .rbw files

(I'm ccing ruby-talk so that you might get more answers)

From http://rubyforge.org/tracker/?func=detail&atid=715&aid=9018&group_id=167
Sender: M Jessick

What is the ruby-ish way to protect any stray "puts"
calls leftover in a .rb fle that you want to run as .rbw?

For example, I develop in in a .rb file, then run it .rbw. If
I leave in a puts call it throws. Rather than go through and
comment them all out (or worse, wrap them all in begin rescue
end blocks ;), I would prefer them to be ignored through some
magic.

Is there a slick ruby way to do this? e.g.: overload puts and
call the system puts within the overload within a begin rescue
end.

For example:

  begin
    puts "puts call that used to be ignored but now raises
an exception in rubyw.exe since sometime in 2006"
  rescue SystemCallError
  end

would solve the problem, but if I was smart enough to do this
everywhere, I would probably know how to do this most conveniently
in ruby :wink:

Try:

module Kernel
  alias_method :orig_puts, :puts
  def puts(*args)
        orig_puts *args if $stdout
  end
end

(not tested)

Jano

···

Date: 2007-04-17 17:09

Hi,

At Wed, 18 Apr 2007 00:19:23 +0900,
Jano Svitok wrote in [ruby-talk:248234]:

Is there a slick ruby way to do this? e.g.: overload puts and
call the system puts within the overload within a begin rescue
end.

The global "puts" calls STDOUT.write.

  def STDOUT.write(str)
    super
  rescue Errno::EBADF
    def self.write(str)
    end
  end

···

--
Nobu Nakada