From ee17d81b8a4e02b5c72e39922f15634b4352c817 Mon Sep 17 00:00:00 2001 From: ThibG Date: Wed, 15 May 2019 06:54:06 +0200 Subject: [PATCH] Minor performance improvements and cleanup in formatter (#10765) --- app/lib/formatter.rb | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb index 59dfc9004..8a1aad41a 100644 --- a/app/lib/formatter.rb +++ b/app/lib/formatter.rb @@ -187,7 +187,7 @@ class Formatter end def rewrite(text, entities) - chars = text.to_s.to_char_a + text = text.to_s # Sort by start index entities = entities.sort_by do |entity| @@ -199,12 +199,12 @@ class Formatter last_index = entities.reduce(0) do |index, entity| indices = entity.respond_to?(:indices) ? entity.indices : entity[:indices] - result << encode(chars[index...indices.first].join) + result << encode(text[index...indices.first]) result << yield(entity) indices.last end - result << encode(chars[last_index..-1].join) + result << encode(text[last_index..-1]) result.flatten.join end @@ -231,23 +231,14 @@ class Formatter # Note: I couldn't obtain list_slug with @user/list-name format # for mention so this requires additional check special = Extractor.extract_urls_with_indices(escaped, options).map do |extract| - # exactly one of :url, :hashtag, :screen_name, :cashtag keys is present - key = (extract.keys & [:url, :hashtag, :screen_name, :cashtag]).first - new_indices = [ old_to_new_index.find_index(extract[:indices].first), old_to_new_index.find_index(extract[:indices].last), ] - has_prefix_char = [:hashtag, :screen_name, :cashtag].include?(key) - value_indices = [ - new_indices.first + (has_prefix_char ? 1 : 0), # account for #, @ or $ - new_indices.last - 1, - ] - next extract.merge( - :indices => new_indices, - key => text[value_indices.first..value_indices.last] + indices: new_indices, + url: text[new_indices.first..new_indices.last - 1] ) end