basics/warn/categories_parens.rb
tests/_examples/basics/warn/categories_parens.rb in the metorex repository.
# `Warning.categories` lists every category `Warning[]` accepts.
p(Warning.categories)
# :experimental starts on, the rest start off.
p(Warning[:deprecated])
p(Warning[:experimental])
p(Warning[:performance])
Warning[:performance] = true
p(Warning[:performance])
Warning[:performance] = false
begin
Warning[:noop]
rescue ArgumentError => error
puts(error.message)
end
begin
Warning["deprecated"]
rescue TypeError => error
puts(error.message)
end
begin
Warning[42] = true
rescue TypeError => error
puts(error.message)
end
# Warning extends itself, so `warn` is an instance method it answers to.
p(Warning.singleton_class.ancestors.include?(Warning))
p(Warning.method(:warn).owner)
# A warning in a category that is switched off never prints.
Warning[:deprecated] = false
p(Warning.warn("suppressed\n", category: :deprecated))
Warning[:deprecated] = true
Warning.warn("printed\n", category: :deprecated)
# A key written twice in one literal is named once, and the warning travels
# through Warning.warn, which a program can replace.
$VERBOSE = false
$collected = []
def Warning.warn(message, category: nil)
$collected << message
nil
end
duplicated = { key: :value, key: :value2 }
p(duplicated)
p($collected.size)
p($collected.first.include?("key :key is duplicated and overwritten"))
Output:
[:deprecated, :experimental, :performance, :strict_unused_block]
false
true
false
true
unknown category: noop
no implicit conversion of String into Symbol
no implicit conversion of Integer into Symbol
true
Warning
nil
{key: :value2}
1
true