Feature #14417 » string_sub_with_symbol_key.patch
| string.c | ||
|---|---|---|
| 
                     repl = rb_obj_as_string(rb_yield(match0)); 
   | 
||
| 
                 } 
   | 
||
| 
                 else { 
   | 
||
| 
                     repl = rb_hash_aref(hash, rb_str_subseq(str, beg0, end0 - beg0)); 
   | 
||
| 
                     VALUE key = rb_str_subseq(str, beg0, end0 - beg0); 
   | 
||
| 
                     repl = rb_hash_aref(hash, key); 
   | 
||
| 
                     if (NIL_P(repl)) { 
   | 
||
| 
                         repl = rb_hash_aref(hash, rb_to_symbol(key)); 
   | 
||
| 
                     } 
   | 
||
| 
                     repl = rb_obj_as_string(repl); 
   | 
||
| 
                 } 
   | 
||
| 
     	    str_mod_check(str, p, len); 
   | 
||
| ... | ... | |
| 
                     val = rb_obj_as_string(rb_yield(match0)); 
   | 
||
| 
                 } 
   | 
||
| 
                 else { 
   | 
||
| 
                     val = rb_hash_aref(hash, rb_str_subseq(str, beg0, end0 - beg0)); 
   | 
||
| 
                     VALUE key = rb_str_subseq(str, beg0, end0 - beg0); 
   | 
||
| 
                     val = rb_hash_aref(hash, key); 
   | 
||
| 
                     if (NIL_P(val)) { 
   | 
||
| 
                         val = rb_hash_aref(hash, rb_to_symbol(key)); 
   | 
||
| 
                     } 
   | 
||
| 
                     val = rb_obj_as_string(val); 
   | 
||
| 
                 } 
   | 
||
| 
     	    str_mod_check(str, sp, slen); 
   | 
||
| test/-ext-/string/test_gsub.rb | ||
|---|---|---|
| 
     require 'test/unit' 
   | 
||
| 
     require "-test-/string" 
   | 
||
| 
     class Test_StringGsub < Test::Unit::TestCase 
   | 
||
| 
       def test_gsub_with_hash 
   | 
||
| 
         hash = {'b'=>'B', 'c'=>'C'} 
   | 
||
| 
         assert_equal("abcabc".gsub(/[bc]/, hash), "aBCaBC") 
   | 
||
| 
         assert_equal("cbacba".gsub(/[bc]/, hash), "CBaCBa") 
   | 
||
| 
         assert_equal("abcabc".gsub(/[ac]/, hash), "bCbC") 
   | 
||
| 
       end 
   | 
||
| 
       def test_gsub_with_symbol_key_hash 
   | 
||
| 
         hash = {b: 'B', c: 'C'} 
   | 
||
| 
         assert_equal("abcabc".gsub(/[bc]/, hash), "aBCaBC") 
   | 
||
| 
         assert_equal("cbacba".gsub(/[bc]/, hash), "CBaCBa") 
   | 
||
| 
         assert_equal("abcabc".gsub(/[ac]/, hash), "bCbC") 
   | 
||
| 
       end 
   | 
||
| 
     end 
   | 
||
| test/-ext-/string/test_sub.rb | ||
|---|---|---|
| 
     require 'test/unit' 
   | 
||
| 
     require "-test-/string" 
   | 
||
| 
     class Test_StringSub < Test::Unit::TestCase 
   | 
||
| 
       def test_sub_with_hash 
   | 
||
| 
         hash = {'b'=>'B', 'c'=>'C'} 
   | 
||
| 
         assert_equal("abcabc".sub(/[bc]/, hash), "aBcabc") 
   | 
||
| 
         assert_equal("cbacba".sub(/[bc]/, hash), "Cbacba") 
   | 
||
| 
         assert_equal("abcabc".sub(/[ac]/, hash), "bcabc") 
   | 
||
| 
       end 
   | 
||
| 
       def test_sub_with_symbol_key_hash 
   | 
||
| 
         hash = {b: 'B', c: 'C'} 
   | 
||
| 
         assert_equal("abcabc".sub(/[bc]/, hash), "aBcabc") 
   | 
||
| 
         assert_equal("cbacba".sub(/[bc]/, hash), "Cbacba") 
   | 
||
| 
         assert_equal("abcabc".sub(/[ac]/, hash), "bcabc") 
   | 
||
| 
       end 
   | 
||
| 
     end 
   | 
||