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:
parent
e06a0b03c8
commit
4dda9b644d
2 changed files with 20 additions and 0 deletions
|
@ -210,6 +210,19 @@ module ActiveSupport #:nodoc:
|
|||
index ? (self.class.u_unpack(@wrapped_string.slice(0...index)).size) : nil
|
||||
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.
|
||||
#
|
||||
# Example:
|
||||
|
|
|
@ -234,6 +234,13 @@ class MultibyteCharsUTF8BehaviourTest < Test::Unit::TestCase
|
|||
assert_equal 3, @chars.index('わ')
|
||||
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
|
||||
@chars[2] = 'a'
|
||||
assert_equal 'こにaわ', @chars
|
||||
|
|
Loading…
Reference in a new issue