Class: NilClass
- Inherits:
-
Object
- Object
- NilClass
- Defined in:
- activesupport/lib/active_support/whiny_nil.rb,
activesupport/lib/active_support/json/encoding.rb,
activesupport/lib/active_support/core_ext/object/try.rb,
activesupport/lib/active_support/core_ext/object/blank.rb,
activesupport/lib/active_support/core_ext/object/to_param.rb,
activesupport/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)
- - (Object) as_json(options = nil)
-
- (Boolean) blank?
nil is blank:.
-
- (Boolean) duplicable?
nil is not duplicable:.
-
- (Object) encode_json(encoder)
:nodoc: :nodoc:.
-
- (Object) id
Raises a RuntimeError when you attempt to call id on nil.
- - (Object) to_param
-
- (Object) try(*args)
Calling try on nil always returns nil.
Class Method Details
+ (Object) add_whiner(klass)
15 16 17 18 |
# File 'activesupport/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
- (Object) as_json(options = nil)
171 |
# File 'activesupport/lib/active_support/json/encoding.rb', line 171 def as_json( = nil) self end |
- (Boolean) blank?
nil is blank:
nil.blank? # => true
48 49 50 |
# File 'activesupport/lib/active_support/core_ext/object/blank.rb', line 48 def blank? true end |
- (Boolean) duplicable?
nil is not duplicable:
nil.duplicable? # => false
nil.dup # => TypeError: can't dup NilClass
35 36 37 |
# File 'activesupport/lib/active_support/core_ext/object/duplicable.rb', line 35 def duplicable? false end |
- (Object) encode_json(encoder)
:nodoc: :nodoc:
172 |
# File 'activesupport/lib/active_support/json/encoding.rb', line 172 def encode_json(encoder) 'null' end |
- (Object) id
Raises a RuntimeError when you attempt to call id on nil.
21 22 23 |
# File 'activesupport/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 |
- (Object) to_param
9 10 11 |
# File 'activesupport/lib/active_support/core_ext/object/to_param.rb', line 9 def to_param self end |
- (Object) try(*args)
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 'activesupport/lib/active_support/core_ext/object/try.rb', line 54 def try(*args) nil end |