Parent

Class/Module Index [+]

Quicksearch

NilClass

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:

$ rails 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.

Public Class Methods

add_whiner(klass) click to toggle source
# File lib/active_support/whiny_nil.rb, line 30
def self.add_whiner(klass)
  methods = klass.public_instance_methods - public_instance_methods
  class_name = klass.name
  methods.each { |method| METHOD_CLASS_MAP[method.to_sym] = class_name }
end

Public Instance Methods

as_json(options = nil) click to toggle source
# File lib/active_support/json/encoding.rb, line 175
def as_json(options = nil) AS_JSON end
blank?() click to toggle source

nil is blank:

nil.blank? # => true
# File lib/active_support/core_ext/object/blank.rb, line 45
def blank?
  true
end
duplicable?() click to toggle source

nil is not duplicable:

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

Raises a RuntimeError when you attempt to call id on nil.

# File lib/active_support/whiny_nil.rb, line 39
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() click to toggle source
# File lib/active_support/core_ext/object/to_param.rb, line 9
def to_param
  self
end
try(*args) click to toggle source

Calling try on nil always 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 lib/active_support/core_ext/object/try.rb, line 50
def try(*args)
  nil
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.