Merge branch 'main' into glitch-soc/merge-upstream
Conflicts: - `app/validators/status_length_validator.rb`: Upstream changes too close to glitch-soc MAX_CHARS changes, but not a real conflict. Applied upstream changes. - `package.json`: glitch-soc-only dependency textually too close to a dependency updated upstream, not a real conflict. Applied upstream changes.
This commit is contained in:
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
32
app/lib/validation_error_formatter.rb
Normal file
32
app/lib/validation_error_formatter.rb
Normal file
@@ -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
|
Reference in New Issue
Block a user