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
Date: 2007-04-17 17:09
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

Hi,

At Wed, 18 Apr 2007 00:19:23 +0900,
Jano S. 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