1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Add rindex to ActiveSupport::Multibyte::Chars.

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
This commit is contained in:
Erik Ostrom 2009-08-09 18:57:25 -07:00 committed by Jeremy Kemper
parent e06a0b03c8
commit 4dda9b644d
2 changed files with 20 additions and 0 deletions

View file

@ -210,6 +210,19 @@ module ActiveSupport #:nodoc:
index ? (self.class.u_unpack(@wrapped_string.slice(0...index)).size) : nil index ? (self.class.u_unpack(@wrapped_string.slice(0...index)).size) : nil
end end
# Returns the position _needle_ in the string, counting in
# codepoints, searching backward from _offset_ or the end of the
# string. Returns +nil+ if _needle_ isn't found.
#
# Example:
# 'Café périferôl'.mb_chars.rindex('é') #=> 5
# 'Café périferôl'.mb_chars.rindex(/\w/u) #=> 13
def rindex(needle, offset=nil)
offset ||= length
index = @wrapped_string.rindex(needle, offset)
index ? (self.class.u_unpack(@wrapped_string.slice(0...index)).size) : nil
end
# Like <tt>String#[]=</tt>, except instead of byte offsets you specify character offsets. # Like <tt>String#[]=</tt>, except instead of byte offsets you specify character offsets.
# #
# Example: # Example:

View file

@ -234,6 +234,13 @@ class MultibyteCharsUTF8BehaviourTest < Test::Unit::TestCase
assert_equal 3, @chars.index('わ') assert_equal 3, @chars.index('わ')
end end
def test_rindex_should_return_character_offset
assert_nil @chars.rindex('u')
assert_equal 1, @chars.rindex('に')
assert_equal 6, 'Café périferôl'.mb_chars.rindex('é')
assert_equal 12, 'Café périferôl'.mb_chars.rindex(/\w/u)
end
def test_indexed_insert_should_take_character_offsets def test_indexed_insert_should_take_character_offsets
@chars[2] = 'a' @chars[2] = 'a'
assert_equal 'こにaわ', @chars assert_equal 'こにaわ', @chars