Is it possible to temporarily redefine the ‘puts’ command?
I have a gem that unnecessarily writes to the console, which effects
the Rspec Story Runner logging,
I do not want to manual comment out the puts as I use this gem on
numerous machines
Aidy
$ irb
irb(main):001:0> alias :oldputs :puts
=> nil
irb(main):002:0> def puts(*args); end
=> nil
irb(main):003:0> puts “hi”
=> nil
irb(main):004:0> alias :puts :oldputs
=> nil
irb(main):005:0> puts “hi”
hi
=> nil
howzat?
You probably want to explicitly do it in Kernel when you do it for real.
Something like this, if you need to do it dynamically.
eval %Q{
module Kernel
alias :oldputs :puts
def puts(*args)
end
end
}
Is it possible to temporarily redefine the ‘puts’ command?
I have a gem that unnecessarily writes to the console, which effects
the Rspec Story Runner logging,
I do not want to manual comment out the puts as I use this gem on
numerous machines
Hi Aidy,
Here’s some code, which should work for you. Of course you’ll have to
answer the questions as where to put the methods puts_on and puts_off
(or whatever you decide to name them).
====
replaces Kernel#puts w/ do-nothing method
def puts_off
Kernel.module_eval %q{
def puts(*args)
end
}
end
restores Kernel#puts to its original definition
def puts_on
Kernel.module_eval %q{
def puts(*args)
$stdout.puts(*args)
end
}
end
puts “You can see me.”
puts_off
puts “But I’m hidden.”
puts_on
puts “But I’m viewable once again.”
====
Eric
====
Interested in hands-on, on-site Ruby or Ruby on Rails
training? See http://LearnRuby.com for information about a
well-reviewed courses.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.