about summary refs log tree commit diff
path: root/app/validators/disallowed_hashtags_validator.rb
blob: 22c027b0fcac07819c5ae77e6658990b554a881d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# frozen_string_literal: true

class DisallowedHashtagsValidator < ActiveModel::Validator
  def validate(status)
    return unless status.local? && !status.reblog?

    tags = Extractor.extract_hashtags(status.text)
    tags.keep_if { |tag| disallowed_hashtags.include? tag.downcase }

    status.errors.add(:text, I18n.t('statuses.disallowed_hashtags', tags: tags.join(', '), count: tags.size)) unless tags.empty?
  end

  private

  def disallowed_hashtags
    return @disallowed_hashtags if @disallowed_hashtags

    @disallowed_hashtags = Setting.disallowed_hashtags.nil? ? [] : Setting.disallowed_hashtags
    @disallowed_hashtags = @disallowed_hashtags.split(' ') if @disallowed_hashtags.is_a? String
    @disallowed_hashtags = @disallowed_hashtags.map(&:downcase)
  end
end