Extensions to nilwhich allow for more helpful error messages for people who are new to Rails.

#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
A
B
D
I
T
Class Public methods
add_whiner(klass)
# File activesupport/lib/active_support/whiny_nil.rb, line 15
def self.add_whiner(klass)
  ActiveSupport::Deprecation.warn "NilClass.add_whiner is deprecated and this functionality is "        "removed from Rails versions as it affects Ruby 1.9 performance.", caller
end
Instance Public methods
blank?()

nilis blank:

nil.blank? # => true
# File activesupport/lib/active_support/core_ext/object/blank.rb, line 47
def blank?
  true
end
duplicable?()

nilis not duplicable:

nil.duplicable? # => false
nil.dup         # => TypeError: can't dup NilClass
# File activesupport/lib/active_support/core_ext/object/duplicable.rb, line 35
def duplicable?
  false
end
id()

Raises a RuntimeError when you attempt to call idon nil.

# File activesupport/lib/active_support/whiny_nil.rb, line 21
def id
  raise RuntimeError, "Called id for nil, which would mistakenly be #{object_id} -- if you really wanted the id of nil, use object_id", caller
end
to_param()
# File activesupport/lib/active_support/core_ext/object/to_param.rb, line 9
def to_param
  self
end
try(*args)

Calling tryon nilalways returns nil. It becomes specially helpful when navigating through associations that may return nil.

Examples

nil.try(:name) # => nil

Without try

@person && !@person.children.blank? && @person.children.first.name

With try

@person.try(:children).try(:first).try(:name)
# File activesupport/lib/active_support/core_ext/object/try.rb, line 54
def try(*args)
  nil
end