summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-04-20 21:30:16 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-04-20 21:30:16 +0900
commita6d8df6761a0c84f0cd275a709050c187f60b35f (patch)
treedc456e277901035c91046cdfebe35a4841442291 /mrbgems
parentbd75406a3e48d95c0e67619719f43fdf1712757a (diff)
parent617fa702117e1afd8557bfc8d8627942deee80e2 (diff)
downloadmruby-a6d8df6761a0c84f0cd275a709050c187f60b35f.tar.gz
mruby-a6d8df6761a0c84f0cd275a709050c187f60b35f.zip
Merge pull request #2088 from ksss/string-casecmp
String#casecmp should be call `to_str`
Diffstat (limited to 'mrbgems')
-rw-r--r--mrbgems/mruby-string-ext/mrblib/string.rb4
-rw-r--r--mrbgems/mruby-string-ext/test/string.rb5
2 files changed, 8 insertions, 1 deletions
diff --git a/mrbgems/mruby-string-ext/mrblib/string.rb b/mrbgems/mruby-string-ext/mrblib/string.rb
index a517aa209..45c631b94 100644
--- a/mrbgems/mruby-string-ext/mrblib/string.rb
+++ b/mrbgems/mruby-string-ext/mrblib/string.rb
@@ -47,7 +47,9 @@ class String
# "abcdef".casecmp("ABCDEF") #=> 0
#
def casecmp(str)
- self.downcase <=> str.downcase
+ self.downcase <=> str.to_str.downcase
+ rescue NoMethodError
+ raise TypeError, "no implicit conversion of #{str.class} into String"
end
def partition(sep)
diff --git a/mrbgems/mruby-string-ext/test/string.rb b/mrbgems/mruby-string-ext/test/string.rb
index 90bb43c65..4c5620575 100644
--- a/mrbgems/mruby-string-ext/test/string.rb
+++ b/mrbgems/mruby-string-ext/test/string.rb
@@ -98,6 +98,11 @@ assert('String#casecmp') do
assert_equal 0, "aBcDeF".casecmp("abcdef")
assert_equal(-1, "abcdef".casecmp("abcdefg"))
assert_equal 0, "abcdef".casecmp("ABCDEF")
+ o = Object.new
+ def o.to_str
+ "ABCDEF"
+ end
+ assert_equal 0, "abcdef".casecmp(o)
end
assert('String#start_with?') do