From d83d9cd164d934c57ab19b6022d29f150c12b3a2 Mon Sep 17 00:00:00 2001 From: ksss Date: Thu, 14 Jul 2016 21:30:31 +0900 Subject: String#insert should be destructive --- mrbgems/mruby-string-ext/mrblib/string.rb | 15 +++++++-------- mrbgems/mruby-string-ext/test/string.rb | 4 ++++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/mrbgems/mruby-string-ext/mrblib/string.rb b/mrbgems/mruby-string-ext/mrblib/string.rb index 3dd5561c8..fc734b951 100644 --- a/mrbgems/mruby-string-ext/mrblib/string.rb +++ b/mrbgems/mruby-string-ext/mrblib/string.rb @@ -254,14 +254,13 @@ class String # "abcd".insert(-1, 'X') #=> "abcdX" # def insert(idx, str) - pos = idx.to_i - pos += self.size + 1 if pos < 0 - - raise IndexError, "index #{idx.to_i} out of string" if pos < 0 || pos > self.size - - return self + str if pos == -1 - return str + self if pos == 0 - return self[0..pos - 1] + str + self[pos..-1] + if idx == -1 + return self << str + elsif idx < 0 + idx += 1 + end + self[idx, 0] = str + self end ## diff --git a/mrbgems/mruby-string-ext/test/string.rb b/mrbgems/mruby-string-ext/test/string.rb index f68fbcb28..aa3e8a192 100644 --- a/mrbgems/mruby-string-ext/test/string.rb +++ b/mrbgems/mruby-string-ext/test/string.rb @@ -406,6 +406,10 @@ assert('String#insert') do assert_equal "abcdX", "abcd".insert(-1, 'X') assert_raise(IndexError) { "abcd".insert(5, 'X') } assert_raise(IndexError) { "abcd".insert(-6, 'X') } + + a = "abcd" + a.insert(0, 'X') + assert_equal "Xabcd", a end assert('String#prepend') do -- cgit v1.2.3