BasicObject#method_missing does not always raise NoMethodError for missing methods
def method_missing(name, *)
rescue NoMethodError => e
if the method is called without the receiver, it will raise just a NameError (variable or method missing)
the text of the error can differ depending on the presence of the receiver, but it seems counter-intuitive to not receive a NoMethodError when you are clearly attempting to call a non-existent method.