1
0
mirror of https://framagit.org/tykayn/mastodon.git synced 2023-08-25 08:33:12 +02:00
mastodon/app/validators/status_length_validator.rb
Eugen Rochko e1fcad34a9 Fix length validator counting things that look like URIs like URLs ()
URI.extract is too strong, not limited to URLs, matched real text.
Same issue was present in language detector.
2017-07-31 05:06:20 +02:00

32 lines
747 B
Ruby

# frozen_string_literal: true
class StatusLengthValidator < ActiveModel::Validator
MAX_CHARS = 500
def validate(status)
return unless status.local? && !status.reblog?
status.errors.add(:text, I18n.t('statuses.over_character_limit', max: MAX_CHARS)) if too_long?(status)
end
private
def too_long?(status)
countable_length(status) > MAX_CHARS
end
def countable_length(status)
total_text(status).mb_chars.grapheme_length
end
def total_text(status)
[status.spoiler_text, countable_text(status)].join
end
def countable_text(status)
status.text.dup.tap do |new_text|
new_text.gsub!(FetchLinkCardService::URL_PATTERN, 'x' * 23)
new_text.gsub!(Account::MENTION_RE, '@\2')
end
end
end