From 2be14a604c72625ae3b03b5533f7c8bf9bc739b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Mon, 10 Apr 2017 23:38:48 +0200 Subject: [PATCH] FIX: censored_pattern with group capturing wasn't working --- lib/validators/censored_words_validator.rb | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/validators/censored_words_validator.rb b/lib/validators/censored_words_validator.rb index ed97a13d2af..3b566a27ea0 100644 --- a/lib/validators/censored_words_validator.rb +++ b/lib/validators/censored_words_validator.rb @@ -1,15 +1,11 @@ class CensoredWordsValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) - if !SiteSetting.censored_words.blank? && - !(censored_words = value.scan(censored_words_regexp)).empty? - + if SiteSetting.censored_words.present? && (censored_words = censor_words(value, censored_words_regexp)).present? record.errors.add( attribute, :contains_censored_words, censored_words: join_censored_words(censored_words) ) - elsif !SiteSetting.censored_pattern.blank? && - !(censored_words = value.scan(/#{SiteSetting.censored_pattern}/i)).empty? - + elsif SiteSetting.censored_pattern.present? && (censored_words = censor_words(value, /#{SiteSetting.censored_pattern}/i)).present? record.errors.add( attribute, :matches_censored_pattern, censored_words: join_censored_words(censored_words) @@ -19,6 +15,16 @@ class CensoredWordsValidator < ActiveModel::EachValidator private + def censor_words(value, regexp) + censored_words = value.scan(regexp) + censored_words.flatten! + censored_words.compact! + censored_words.map!(&:strip) + censored_words.select!(&:present?) + censored_words.uniq! + censored_words + end + def join_censored_words(censored_words) censored_words.map!(&:downcase) censored_words.uniq!