Class: NilClass

Inherits:
Object show all
Defined in:
lib/active_support/whiny_nil.rb,
lib/active_support/json/encoding.rb,
lib/active_support/core_ext/object/try.rb,
lib/active_support/core_ext/object/blank.rb,
lib/active_support/core_ext/object/to_param.rb,
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.

Constant Summary collapse

AS_JSON =
ActiveSupport::JSON::Variable.new('null').freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.add_whiner(klass) ⇒ Object



13
14
15
16
# File 'lib/active_support/whiny_nil.rb', line 13

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:



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

def as_json(options = nil) AS_JSON end

#blank?Boolean

nil is blank:

nil.blank? # => true

Returns:

  • (Boolean)


45
46
47
# File 'lib/active_support/core_ext/object/blank.rb', line 45

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 'lib/active_support/core_ext/object/duplicable.rb', line 35

def duplicable?
  false
end

#idObject

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

Raises:

  • (RuntimeError)


19
20
21
# File 'lib/active_support/whiny_nil.rb', line 19

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 '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)


50
51
52
# File 'lib/active_support/core_ext/object/try.rb', line 50

def try(*args)
  nil
end