This is a followup issue to #11252. I'd like to add a method that basically does the same thing as NameError#missing_name. This will allow gems like Rails and did_you_mean to get a qualified name without parsing an error message.
begin HelloWorld rescue NameError => e error.name # => :HelloWorld error.qualified_name # => :HelloWorld end begin String::DoesntExist rescue NameError => e error.name # => :DoesntExist error.qualified_name # => :"String::DoesntExist" end
I'm not actually sure what it should return when the module/class is an anonymous module/class, but one thing we can do is just use the result of
m = Module.new begin m::DoesntExist rescue NameError => e error.name # => :DoesntExist error.qualified_name # => :"#<Module:0x0000000260c2f8>::DoesntExist" end
I'm open to suggestions. Let me know what you think.
Updated by yuki24 (Yuki Nishijima) about 4 years ago
That actually makes more sense and is what we talked about at the last Ruby developers meeting. According to Nobu it requires a lot of work, though. But in terms of the interface, I'm 👍 on
NameError#receiver returning the receiving module in a "uninitialized constant" NameError.