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.
Constant Summary collapse
- AS_JSON =
ActiveSupport::JSON::Variable.new('null').freeze
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:. -
#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
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( = nil) AS_JSON end |
#blank? ⇒ Boolean
nil
is blank:
nil.blank? # => true
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
35 36 37 |
# File 'lib/active_support/core_ext/object/duplicable.rb', line 35 def duplicable? false end |
#id ⇒ Object
Raises a RuntimeError when you attempt to call id
on nil
.
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_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)
50 51 52 |
# File 'lib/active_support/core_ext/object/try.rb', line 50 def try(*args) nil end |