Merge pull request #4304 from lest/refactor-truncate

refactor String#truncate not to use mb_chars
This commit is contained in:
Aaron Patterson 2012-01-05 09:23:16 -08:00
commit f4ef09c154
1 changed files with 5 additions and 6 deletions

View File

@ -36,14 +36,13 @@ class String
# "And they found that many people were sleeping better.".truncate(25, :omission => "... (continued)") # "And they found that many people were sleeping better.".truncate(25, :omission => "... (continued)")
# # => "And they f... (continued)" # # => "And they f... (continued)"
def truncate(length, options = {}) def truncate(length, options = {})
text = self.dup return self.dup unless self.length > length
options[:omission] ||= "..." options[:omission] ||= "..."
length_with_room_for_omission = length - options[:omission].length
length_with_room_for_omission = length - options[:omission].mb_chars.length
chars = text.mb_chars
stop = options[:separator] ? stop = options[:separator] ?
(chars.rindex(options[:separator].mb_chars, length_with_room_for_omission) || length_with_room_for_omission) : length_with_room_for_omission (rindex(options[:separator], length_with_room_for_omission) || length_with_room_for_omission) : length_with_room_for_omission
(chars.length > length ? chars[0...stop] + options[:omission] : text).to_s self[0...stop] + options[:omission]
end end
end end