errors/highlight_keyword.rb

tests/_examples/errors/highlight_keyword.rb in the metorex repository.

# `highlight:` takes true, false, or nil and nothing else.
problem = begin
  raise("meter offline")
rescue => raised
  raised
end
p problem.full_message(highlight: false, order: :top).include?("meter offline (RuntimeError)")
p problem.detailed_message(highlight: nil)
begin
  problem.full_message(highlight: "yes")
rescue ArgumentError => refused
  p refused.message
end
begin
  problem.detailed_message(highlight: 1)
rescue ArgumentError => refused
  p refused.message
end

# A program's own `set_backtrace` is handed the backtrace `raise` names.
class LoggedError < StandardError
  attr_reader :log
  def set_backtrace(lines)
    (@log ||= []) << lines
    super
  end
end
begin
  raise LoggedError, "late", ["meter.rb:4"]
rescue LoggedError => caught
  p caught.log
  p caught.backtrace
end

Output:

true
"meter offline (RuntimeError)"
"expected true or false as highlight: \"yes\""
"expected true or false as highlight: 1"
[["meter.rb:4"]]
["meter.rb:4"]