mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Just use Ruby's String#[]=
This commit is contained in:
parent
46579340c0
commit
b81bef531c
2 changed files with 0 additions and 46 deletions
|
@ -80,47 +80,6 @@ module ActiveSupport #:nodoc:
|
||||||
@wrapped_string.split(*args).map { |i| i.mb_chars }
|
@wrapped_string.split(*args).map { |i| i.mb_chars }
|
||||||
end
|
end
|
||||||
|
|
||||||
# Like <tt>String#[]=</tt>, except instead of byte offsets you specify character offsets.
|
|
||||||
#
|
|
||||||
# Example:
|
|
||||||
#
|
|
||||||
# s = "Müller"
|
|
||||||
# s.mb_chars[2] = "e" # Replace character with offset 2
|
|
||||||
# s
|
|
||||||
# # => "Müeler"
|
|
||||||
#
|
|
||||||
# s = "Müller"
|
|
||||||
# s.mb_chars[1, 2] = "ö" # Replace 2 characters at character offset 1
|
|
||||||
# s
|
|
||||||
# # => "Möler"
|
|
||||||
def []=(*args)
|
|
||||||
replace_by = args.pop
|
|
||||||
# Indexed replace with regular expressions already works
|
|
||||||
if args.first.is_a?(Regexp)
|
|
||||||
@wrapped_string[*args] = replace_by
|
|
||||||
else
|
|
||||||
result = Unicode.u_unpack(@wrapped_string)
|
|
||||||
case args.first
|
|
||||||
when Fixnum
|
|
||||||
raise IndexError, "index #{args[0]} out of string" if args[0] >= result.length
|
|
||||||
min = args[0]
|
|
||||||
max = args[1].nil? ? min : (min + args[1] - 1)
|
|
||||||
range = Range.new(min, max)
|
|
||||||
replace_by = [replace_by].pack('U') if replace_by.is_a?(Fixnum)
|
|
||||||
when Range
|
|
||||||
raise RangeError, "#{args[0]} out of range" if args[0].min >= result.length
|
|
||||||
range = args[0]
|
|
||||||
else
|
|
||||||
needle = args[0].to_s
|
|
||||||
min = index(needle)
|
|
||||||
max = min + Unicode.u_unpack(needle).length - 1
|
|
||||||
range = Range.new(min, max)
|
|
||||||
end
|
|
||||||
result[range] = Unicode.u_unpack(replace_by)
|
|
||||||
@wrapped_string.replace(result.pack('U*'))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def slice!(*args)
|
def slice!(*args)
|
||||||
chars(@wrapped_string.slice!(*args))
|
chars(@wrapped_string.slice!(*args))
|
||||||
end
|
end
|
||||||
|
|
|
@ -117,11 +117,6 @@ class MultibyteCharsUTF8BehaviourTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_indexed_insert_accepts_fixnums
|
|
||||||
@chars[2] = 32
|
|
||||||
assert_equal 'こに わ', @chars
|
|
||||||
end
|
|
||||||
|
|
||||||
%w{capitalize downcase lstrip reverse rstrip upcase}.each do |method|
|
%w{capitalize downcase lstrip reverse rstrip upcase}.each do |method|
|
||||||
class_eval(<<-EOTESTS)
|
class_eval(<<-EOTESTS)
|
||||||
def test_#{method}_bang_should_return_self_when_modifying_wrapped_string
|
def test_#{method}_bang_should_return_self_when_modifying_wrapped_string
|
||||||
|
|
Loading…
Reference in a new issue