2007-01-22 14:43:50 +01:00
|
|
|
module Kernel
|
|
|
|
# Sets $VERBOSE to nil for the duration of the block and back to its original value afterwards.
|
|
|
|
#
|
|
|
|
# silence_warnings do
|
|
|
|
# value = noisy_call # no warning voiced
|
|
|
|
# end
|
|
|
|
#
|
|
|
|
# noisy_call # warning voiced
|
|
|
|
def silence_warnings
|
|
|
|
old_verbose, $VERBOSE = $VERBOSE, nil
|
|
|
|
yield
|
|
|
|
ensure
|
|
|
|
$VERBOSE = old_verbose
|
|
|
|
end
|
|
|
|
|
|
|
|
# Sets $VERBOSE to true for the duration of the block and back to its original value afterwards.
|
|
|
|
def enable_warnings
|
|
|
|
old_verbose, $VERBOSE = $VERBOSE, true
|
|
|
|
yield
|
|
|
|
ensure
|
|
|
|
$VERBOSE = old_verbose
|
|
|
|
end
|
|
|
|
|
|
|
|
# For compatibility
|
|
|
|
def silence_stderr #:nodoc:
|
|
|
|
silence_stream(STDERR) { yield }
|
|
|
|
end
|
|
|
|
|
|
|
|
# Silences any stream for the duration of the block.
|
|
|
|
#
|
|
|
|
# silence_stream(STDOUT) do
|
|
|
|
# puts 'This will never be seen'
|
|
|
|
# end
|
|
|
|
#
|
|
|
|
# puts 'But this will'
|
|
|
|
def silence_stream(stream)
|
|
|
|
old_stream = stream.dup
|
|
|
|
stream.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
|
|
|
|
stream.sync = true
|
|
|
|
yield
|
|
|
|
ensure
|
|
|
|
stream.reopen(old_stream)
|
|
|
|
end
|
|
|
|
|
2008-05-18 06:22:34 +02:00
|
|
|
# Blocks and ignores any exception passed as argument if raised within the block.
|
|
|
|
#
|
|
|
|
# suppress(ZeroDivisionError) do
|
|
|
|
# 1/0
|
|
|
|
# puts "This code is NOT reached"
|
|
|
|
# end
|
|
|
|
#
|
|
|
|
# puts "This code gets executed and nothing related to ZeroDivisionError was seen"
|
2007-01-22 14:43:50 +01:00
|
|
|
def suppress(*exception_classes)
|
|
|
|
begin yield
|
|
|
|
rescue Exception => e
|
|
|
|
raise unless exception_classes.any? { |cls| e.kind_of?(cls) }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|