Class: NilClass

Inherits:
Object show all
Defined in:
activesupport/lib/active_support/whiny_nil.rb,
activesupport/lib/active_support/json/encoding.rb,
activesupport/lib/active_support/core_ext/object/try.rb,
activesupport/lib/active_support/core_ext/object/blank.rb,
activesupport/lib/active_support/core_ext/object/to_param.rb,
activesupport/lib/active_support/core_ext/object/duplicable.rb

Overview

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

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.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.add_whiner(klass) ⇒ Object


15
16
17
18
# 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 Method Details

#as_json(options = nil) ⇒ Object

:nodoc:


171
# File 'activesupport/lib/active_support/json/encoding.rb', line 171

def as_json(options = nil) self end

#blank?Boolean

nil is blank:

nil.blank? # => true

Returns:

  • (Boolean)

48
49
50
# File 'activesupport/lib/active_support/core_ext/object/blank.rb', line 48

def blank?
  true
end

#duplicable?Boolean

nil is not duplicable:

nil.duplicable? # => false
nil.dup         # => TypeError: can't dup NilClass

Returns:

  • (Boolean)

35
36
37
# File 'activesupport/lib/active_support/core_ext/object/duplicable.rb', line 35

def duplicable?
  false
end

#encode_json(encoder) ⇒ Object

:nodoc:


172
# File 'activesupport/lib/active_support/json/encoding.rb', line 172

def encode_json(encoder) 'null' end

#idObject

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

Raises:

  • (RuntimeError)

21
22
23
# 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_paramObject


9
10
11
# File 'activesupport/lib/active_support/core_ext/object/to_param.rb', line 9

def to_param
  self
end

#try(*args) ⇒ Object

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)

54
55
56
# File 'activesupport/lib/active_support/core_ext/object/try.rb', line 54

def try(*args)
  nil
end