File: whiny_nil.rb

# whiny_nil.rb

Path: | lib/active_support/whiny_nil.rb
Last Update: | Tue Aug 12 12:29:52 -0600 2008

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.

[Validate]