basics/warn/messages_parens.rb
tests/_examples/basics/warn/messages_parens.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