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.
# File lib/active_support/whiny_nil.rb, line 15 15: def self.add_whiner(klass) 16: ActiveSupport::Deprecation.warn "NilClass.add_whiner is deprecated and this functionality is " "removed from Rails versions as it affects Ruby 1.9 performance.", caller 17: end
# File lib/active_support/json/encoding.rb, line 171 171: def as_json(options = nil) self end
nil is blank:
nil.blank? # => true
# File lib/active_support/core_ext/object/blank.rb, line 48 48: def blank? 49: true 50: end
nil is not duplicable:
nil.duplicable? # => false nil.dup # => TypeError: can't dup NilClass
# File lib/active_support/core_ext/object/duplicable.rb, line 35 35: def duplicable? 36: false 37: end
# File lib/active_support/json/encoding.rb, line 172 172: def encode_json(encoder) 'null' end
Raises a RuntimeError when you attempt to call id on nil.
# File lib/active_support/whiny_nil.rb, line 21 21: def id 22: raise RuntimeError, "Called id for nil, which would mistakenly be #{object_id} -- if you really wanted the id of nil, use object_id", caller 23: end
# File lib/active_support/core_ext/object/to_param.rb, line 9 9: def to_param 10: self 11: end
Calling try on nil always returns nil. It becomes specially helpful when navigating through associations that may return nil.
nil.try(:name) # => nil
Without try
@person && !@person.children.blank? && @person.children.first.name
With try
@person.try(:children).try(:first).try(:name)
# File lib/active_support/core_ext/object/try.rb, line 54 54: def try(*args) 55: nil 56: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.