metaprogramming/caller_entries_parens.rb

tests/_examples/metaprogramming/caller_entries_parens.rb in the metorex repository.

def innermost
  all = caller(0)
  puts(all[0].include?("#{__FILE__}:2:in 'Object#innermost'"))
  puts(all[1].include?("in 'Object#middle'"))
  puts(all[2].include?("in 'Object#outermost'"))
  puts(caller.length == all.length - 1)
  puts(caller(1..1).length == 1)
  puts(caller(2..-1) == all[2..-1])
  puts(caller(100).inspect)
  puts(caller(all.length).inspect)
end

def middle
  innermost
end

def outermost
  middle
end

outermost

reported = nil
runner = proc { reported = caller(0)[0] }
runner.call
puts(reported.include?("in 'block in <main>'"))

puts(Kernel.private_instance_methods.include?(:caller))

Output:

true
true
true
true
true
true
nil
[]
true
true