aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/whiny_nil.rb
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2009-11-13 12:15:49 -0800
committerJeremy Kemper <jeremy@bitsweat.net>2009-11-13 12:25:54 -0800
commit9acc824d96db039486fc493c6f904035fe386967 (patch)
tree5b999c536875abb8ba1177c83e7b9da78b10841b /activesupport/lib/active_support/whiny_nil.rb
parent0214d337b3b3301f4e1478248b386d43ca6c15e0 (diff)
downloadrails-9acc824d96db039486fc493c6f904035fe386967.tar.gz
rails-9acc824d96db039486fc493c6f904035fe386967.tar.bz2
rails-9acc824d96db039486fc493c6f904035fe386967.zip
Ruby 1.9.2: disallow explicit coercion via method_missing. Only give friendly nil errors for Array and Active Record methods.
Diffstat (limited to 'activesupport/lib/active_support/whiny_nil.rb')
-rw-r--r--activesupport/lib/active_support/whiny_nil.rb10
1 files changed, 8 insertions, 2 deletions
diff --git a/activesupport/lib/active_support/whiny_nil.rb b/activesupport/lib/active_support/whiny_nil.rb
index 36fe9510ba..c4aaba7ab3 100644
--- a/activesupport/lib/active_support/whiny_nil.rb
+++ b/activesupport/lib/active_support/whiny_nil.rb
@@ -43,7 +43,14 @@ class NilClass
private
def method_missing(method, *args, &block)
- raise_nil_warning_for METHOD_CLASS_MAP[method], method, caller
+ # Ruby 1.9.2: disallow explicit coercion via method_missing.
+ if method == :to_ary || method == :to_str
+ super
+ elsif klass = METHOD_CLASS_MAP[method]
+ raise_nil_warning_for klass, method, caller
+ else
+ super
+ end
end
# Raises a NoMethodError when you attempt to call a method on +nil+.
@@ -55,4 +62,3 @@ class NilClass
raise NoMethodError, message, with_caller || caller
end
end
-