diff --git a/lib/ext/core/string.rb b/lib/ext/core/string.rb index 608acc628..633302474 100644 --- a/lib/ext/core/string.rb +++ b/lib/ext/core/string.rb @@ -24,15 +24,13 @@ class String # same as reverse.truncate.reverse def rtruncate(length, options = {}) - text = self.dup + chars = self.dup.mb_chars + return self if chars.length <= length options[:omission] ||= "..." options[:separator] ||= '/' - length_with_room_for_omission = length - options[:omission].mb_chars.length - chars = text.mb_chars - stop = options[:separator] ? - (chars.index(options[:separator].mb_chars, length_with_room_for_omission) || length_with_room_for_omission) : length_with_room_for_omission - - (chars.length > length ? "#{options[:omission]}#{chars[-(stop+1)...-1]}" : text).to_s + start = chars.length - length + options[:omission].mb_chars.length + stop = options[:separator] ? (chars.index(options[:separator].mb_chars, start) || start) : start + "#{options[:omission]}#{chars[stop..-1]}".to_s end end