diff options
Diffstat (limited to 'app/lib')
-rw-r--r-- | app/lib/extractor.rb | 8 | ||||
-rw-r--r-- | app/lib/formatter.rb | 2 | ||||
-rw-r--r-- | app/lib/validation_error_formatter.rb | 32 |
3 files changed, 37 insertions, 5 deletions
diff --git a/app/lib/extractor.rb b/app/lib/extractor.rb index 6076458ad..8020aa916 100644 --- a/app/lib/extractor.rb +++ b/app/lib/extractor.rb @@ -1,20 +1,20 @@ # frozen_string_literal: true module Extractor - extend Twitter::Extractor + extend Twitter::TwitterText::Extractor module_function # :yields: username, list_slug, start, end def extract_mentions_or_lists_with_indices(text) - return [] unless Twitter::Regex[:at_signs].match?(text) + return [] unless Twitter::TwitterText::Regex[:at_signs].match?(text) possible_entries = [] text.to_s.scan(Account::MENTION_RE) do |screen_name, _| match_data = $LAST_MATCH_INFO after = $' - unless Twitter::Regex[:end_mention_match].match?(after) + unless Twitter::TwitterText::Regex[:end_mention_match].match?(after) start_position = match_data.char_begin(1) - 1 end_position = match_data.char_end(1) possible_entries << { @@ -44,7 +44,7 @@ module Extractor if %r{\A://}.match?(after) hash_text.match(/(.+)(https?\Z)/) do |matched| hash_text = matched[1] - end_position -= matched[2].char_length + end_position -= matched[2].codepoint_length end end diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb index 1aeedac8a..9a3e63d46 100644 --- a/app/lib/formatter.rb +++ b/app/lib/formatter.rb @@ -348,7 +348,7 @@ class Formatter html_attrs[:rel] = "me #{html_attrs[:rel]}" if options[:me] - Twitter::Autolink.send(:link_to_text, entity, link_html(entity[:url]), url, html_attrs) + Twitter::TwitterText::Autolink.send(:link_to_text, entity, link_html(entity[:url]), url, html_attrs) rescue Addressable::URI::InvalidURIError, IDN::Idna::IdnaError encode(entity[:url]) end diff --git a/app/lib/validation_error_formatter.rb b/app/lib/validation_error_formatter.rb new file mode 100644 index 000000000..3f964f739 --- /dev/null +++ b/app/lib/validation_error_formatter.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +class ValidationErrorFormatter + def initialize(error, aliases = {}) + @error = error + @aliases = aliases + end + + def as_json + { error: @error.to_s, details: details } + end + + private + + def details + h = {} + + errors.details.each_pair do |attribute_name, attribute_errors| + messages = errors.messages[attribute_name] + + h[@aliases[attribute_name] || attribute_name] = attribute_errors.map.with_index do |error, index| + { error: 'ERR_' + error[:error].to_s.upcase, description: messages[index] } + end + end + + h + end + + def errors + @errors ||= @error.record.errors + end +end |