errors/eval_and_internal_frames_no_parens.rb

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

def run_snippet code
  eval code, binding, "(snippet)", 7
end

begin
  run_snippet("unknown_name")
rescue NameError => error
  p(error.backtrace.first.sub(/\A.*?:/, "FILE:"))
end

begin
  1.tap { raise "inside tap" }
rescue => error
  p(error.backtrace.map { |line| line.sub(/\A[^:]*:/, "FILE:") })
end

class Vault
  private def secret = 1
  protected def guarded = 2
end
p (Vault.new.public_method(:secret) rescue $!)
p (Vault.new.public_method(:guarded) rescue $!)
p (Object.new.public_method(:exit) rescue $!)

Output:

"FILE:7:in 'Object#run_snippet'"
["FILE:12:in 'block in <main>'", "FILE:12:in 'Kernel#tap'", "FILE:12:in '<main>'"]
#<NameError: method 'secret' for class 'Vault' is private>
#<NameError: method 'guarded' for class 'Vault' is protected>
#<NameError: method 'exit' for class 'Object' is private>