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
nilis blank:. -
#duplicable? ⇒ Boolean
nilis not duplicable:. -
#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
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 |