Class: NilClass
- 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.
Class Method Summary collapse
Instance Method Summary collapse
-
#as_json(options = nil) ⇒ Object
:nodoc:.
-
#blank? ⇒ Boolean
nil
is blank:. -
#duplicable? ⇒ Boolean
nil
is not duplicable:. -
#encode_json(encoder) ⇒ Object
:nodoc:.
-
#id ⇒ Object
Raises a RuntimeError when you attempt to call
id
onnil
. - #to_param ⇒ Object
-
#try(*args) ⇒ Object
Calling
try
onnil
always returnsnil
.
Class Method Details
.add_whiner(klass) ⇒ Object
15 16 17 18 |
# File '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 'lib/active_support/json/encoding.rb', line 171 def as_json( = nil) self end |
#blank? ⇒ Boolean
nil
is blank:
nil.blank? # => true
48 49 50 |
# File '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
35 36 37 |
# File 'lib/active_support/core_ext/object/duplicable.rb', line 35 def duplicable? false end |
#encode_json(encoder) ⇒ Object
:nodoc:
172 |
# File 'lib/active_support/json/encoding.rb', line 172 def encode_json(encoder) 'null' end |
#id ⇒ Object
Raises a RuntimeError when you attempt to call id
on nil
.
21 22 23 |
# File '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 ⇒ Object
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)
54 55 56 |
# File 'lib/active_support/core_ext/object/try.rb', line 54 def try(*args) nil end |