errors/name_error/names.rb

tests/_examples/errors/name_error/names.rb in the metorex repository.

def report
  yield
rescue NameError => error
  p error.name
end

report { doesnt_exist }
report { DoesntExist }
report { Object::DoesntExist }

ivar_name = "invalid_ivar_name"
report { Object.new.instance_variable_get ivar_name }

cvar_name = "invalid_cvar_name"
report { Object.class_variable_get cvar_name }

class Counter
  @@total = 7

  def self.total
    @@total
  end

  def self.missing
    @@never_set
  end
end

class Subcounter < Counter
end

puts Counter.total
puts Subcounter.total

begin
  Counter.missing
rescue NameError => error
  puts error.message
  p error.name
end

Output:

:doesnt_exist
:DoesntExist
:DoesntExist
"invalid_ivar_name"
"invalid_cvar_name"
7
7
uninitialized class variable @@never_set in Counter
:@@never_set