You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

22 lines
781 B

  1. # frozen_string_literal: true
  2. class DisallowedHashtagsValidator < ActiveModel::Validator
  3. def validate(status)
  4. return unless status.local? && !status.reblog?
  5. tags = Extractor.extract_hashtags(status.text)
  6. tags.keep_if { |tag| disallowed_hashtags.include? tag.downcase }
  7. status.errors.add(:text, I18n.t('statuses.disallowed_hashtags', tags: tags.join(', '), count: tags.size)) unless tags.empty?
  8. end
  9. private
  10. def disallowed_hashtags
  11. return @disallowed_hashtags if @disallowed_hashtags
  12. @disallowed_hashtags = Setting.disallowed_hashtags.nil? ? [] : Setting.disallowed_hashtags
  13. @disallowed_hashtags = @disallowed_hashtags.split(' ') if @disallowed_hashtags.is_a? String
  14. @disallowed_hashtags = @disallowed_hashtags.map(&:downcase)
  15. end
  16. end