diff options
| author | ksss <[email protected]> | 2014-04-20 13:06:25 +0900 |
|---|---|---|
| committer | ksss <[email protected]> | 2014-04-20 13:25:07 +0900 |
| commit | 617fa702117e1afd8557bfc8d8627942deee80e2 (patch) | |
| tree | adc32f4f4fb665b37113ec797e98e61170ea11ec /mrbgems/mruby-string-ext | |
| parent | 44cc51fef7b68f2b93a5c51d4da9778ca43fa80e (diff) | |
| download | mruby-617fa702117e1afd8557bfc8d8627942deee80e2.tar.gz mruby-617fa702117e1afd8557bfc8d8627942deee80e2.zip | |
String#casecmp should be call `to_str`
when non String object sent
And should be raise TypeError
when can not responsed to `to_str`
Diffstat (limited to 'mrbgems/mruby-string-ext')
| -rw-r--r-- | mrbgems/mruby-string-ext/mrblib/string.rb | 4 | ||||
| -rw-r--r-- | mrbgems/mruby-string-ext/test/string.rb | 5 |
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 |
