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
|
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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue