basics/warn/messages.rb
tests/_examples/basics/warn/messages.rb in the metorex repository.
# Kernel#warn writes through $stderr, honoring $VERBOSE and its keywords.
class Recorder
attr_reader :lines
def initialize
@lines = []
end
def write(text)
@lines.push text
end
end
recorder = Recorder.new
$stderr = recorder
$VERBOSE = nil
warn "silenced"
$VERBOSE = true
warn "plain"
warn "already ended\n"
warn "first", "second"
warn ["from", "an array"]
# A warning in a category that is switched off never prints.
Warning[:deprecated] = true
warn "categorized", category: :deprecated
Warning[:deprecated] = false
warn "silenced by its category", category: :deprecated
empty = {}
warn(**empty)
warn("with empty keywords", **empty)
def outer(message, level)
inner message, level
end
def inner(message, level)
warn message, uplevel: level
end
outer "too far", 100
begin
warn "bad", category: Object.new
rescue TypeError
recorder.write "TypeError for an unconvertible category\n"
end
begin
warn "bad", uplevel: -1
rescue ArgumentError
recorder.write "ArgumentError for a negative uplevel\n"
end
begin
warn "bad", uplevel: "one"
rescue TypeError
recorder.write "TypeError for a non-Integer uplevel\n"
end
$stderr = STDERR
print recorder.lines.join
Output:
plain
already ended
first
second
from
an array
categorized
with empty keywords
warning: too far
TypeError for an unconvertible category
ArgumentError for a negative uplevel
TypeError for a non-Integer uplevel