From 617fa702117e1afd8557bfc8d8627942deee80e2 Mon Sep 17 00:00:00 2001 From: ksss Date: Sun, 20 Apr 2014 13:06:25 +0900 Subject: String#casecmp should be call `to_str` when non String object sent And should be raise TypeError when can not responsed to `to_str` --- mrbgems/mruby-string-ext/mrblib/string.rb | 4 +++- mrbgems/mruby-string-ext/test/string.rb | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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 -- cgit v1.2.3