How to redefine puts in .rbw files

J

Jano Svitok

(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 ;)

Try:

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

(not tested)

Jano
 
N

Nobuyoshi Nakada

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,990
Messages
2,570,211
Members
46,796
Latest member
SteveBreed

Latest Threads

Top