Extensions to nil which allow for more helpful error messages for
people who are new to Rails.
Ruby raises NoMethodError if you invoke a method on an object that does not
respond to it:
$ ruby -e nil.destroy
-e:1: undefined method `destroy' for nil:NilClass (NoMethodError)
With these extensions, if the method belongs to the public interface of the
classes in NilClass::WHINERS the error message suggests which could be the
actual intended class:
$ script/runner nil.destroy
...
You might have expected an instance of ActiveRecord::Base.
...
NilClass#id exists in Ruby 1.8 (though it is deprecated). Since id
is a fundamental method of Active Record models NilClass#id is redefined as
well to raise a RuntimeError and warn the user. She probably wanted a model
database identifier and the 4 returned by the original method could result
in obscure bugs.
The flag config.whiny_nils determines whether this feature is
enabled. By default it is on in development and test modes, and it is off
in production mode.