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
nilis blank:. -
#duplicable? ⇒ Boolean
nilis not duplicable:. -
#encode_json(encoder) ⇒ Object
:nodoc:.
-
#id ⇒ Object
Raises a RuntimeError when you attempt to call
idonnil. - #to_param ⇒ Object
-
#try(*args) ⇒ Object
Calling
tryonnilalways 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 |