Extensions to nilwhich 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.
...

#id exists in Ruby 1.8 (though it is deprecated). Since idis a fundamental method of Active Record models #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_nilsdetermines whether this feature is enabled. By default it is on in development and test modes, and it is off in production mode.

Methods
I
T
Constants
AS_JSON = ActiveSupport::JSON::Variable.new('null').freeze
 
WHINERS = [::Array]
 
METHOD_CLASS_MAP = Hash.new
 
Instance Public methods
id()

Raises a RuntimeError when you attempt to call idon nil.

# File activesupport/lib/active_support/whiny_nil.rb, line 40
def id
  raise RuntimeError, "Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id", caller
end
to_param()
# File actionpack/lib/action_controller/routing/routing_ext.rb, line 20
def to_param
  self
end
try(*args)
# File activesupport/lib/active_support/core_ext/try.rb, line 33
def try(*args)
  nil
end