about summary refs log tree commit diff
path: root/app/validators
diff options
context:
space:
mode:
authorThibaut Girka <thib@sitedethib.com>2019-01-02 13:45:18 +0100
committerThibaut Girka <thib@sitedethib.com>2019-01-02 15:36:53 +0100
commit571d219bb917cefcca7419a0ad4e3889689d5f6a (patch)
tree6ab91adcb2c164fd027708e58f5fb96c52474007 /app/validators
parentb300948526d967aaf5608c93546ee0d54940c0ef (diff)
parent66436d08959998be20c6c6bf631177d8c1f3e0d1 (diff)
Merge branch 'master' into glitch-soc/merge-upstream
Conflicts manually resolved:
- app/services/post_status_service.rb
- config/locales/simple_form.pl.yml
- config/routes.rb
- config/webpack/loaders/sass.js
- config/webpack/shared.js
- package.json
- yarn.lock
Diffstat (limited to 'app/validators')
-rw-r--r--app/validators/blacklisted_email_validator.rb17
-rw-r--r--app/validators/disallowed_hashtags_validator.rb9
-rw-r--r--app/validators/status_length_validator.rb22
3 files changed, 28 insertions, 20 deletions
diff --git a/app/validators/blacklisted_email_validator.rb b/app/validators/blacklisted_email_validator.rb
index 3f203f49a..a2061fdd3 100644
--- a/app/validators/blacklisted_email_validator.rb
+++ b/app/validators/blacklisted_email_validator.rb
@@ -2,31 +2,32 @@
 
 class BlacklistedEmailValidator < ActiveModel::Validator
   def validate(user)
-    user.errors.add(:email, I18n.t('users.invalid_email')) if blocked_email?(user.email)
+    @email = user.email
+    user.errors.add(:email, I18n.t('users.invalid_email')) if blocked_email?
   end
 
   private
 
-  def blocked_email?(value)
-    on_blacklist?(value) || not_on_whitelist?(value)
+  def blocked_email?
+    on_blacklist? || not_on_whitelist?
   end
 
-  def on_blacklist?(value)
-    return true if EmailDomainBlock.block?(value)
+  def on_blacklist?
+    return true if EmailDomainBlock.block?(@email)
     return false if Rails.configuration.x.email_domains_blacklist.blank?
 
     domains = Rails.configuration.x.email_domains_blacklist.gsub('.', '\.')
     regexp  = Regexp.new("@(.+\\.)?(#{domains})", true)
 
-    value =~ regexp
+    @email =~ regexp
   end
 
-  def not_on_whitelist?(value)
+  def not_on_whitelist?
     return false if Rails.configuration.x.email_domains_whitelist.blank?
 
     domains = Rails.configuration.x.email_domains_whitelist.gsub('.', '\.')
     regexp  = Regexp.new("@(.+\\.)?(#{domains})$", true)
 
-    value !~ regexp
+    @email !~ regexp
   end
 end
diff --git a/app/validators/disallowed_hashtags_validator.rb b/app/validators/disallowed_hashtags_validator.rb
index 22c027b0f..ee06b20f6 100644
--- a/app/validators/disallowed_hashtags_validator.rb
+++ b/app/validators/disallowed_hashtags_validator.rb
@@ -4,14 +4,19 @@ 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 = status
+    tags    = select_tags
 
     status.errors.add(:text, I18n.t('statuses.disallowed_hashtags', tags: tags.join(', '), count: tags.size)) unless tags.empty?
   end
 
   private
 
+  def select_tags
+    tags = Extractor.extract_hashtags(@status.text)
+    tags.keep_if { |tag| disallowed_hashtags.include? tag.downcase }
+  end
+
   def disallowed_hashtags
     return @disallowed_hashtags if @disallowed_hashtags
 
diff --git a/app/validators/status_length_validator.rb b/app/validators/status_length_validator.rb
index 2db9b29f6..92ee5e643 100644
--- a/app/validators/status_length_validator.rb
+++ b/app/validators/status_length_validator.rb
@@ -5,27 +5,29 @@ class StatusLengthValidator < ActiveModel::Validator
 
   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)
+
+    @status = status
+    status.errors.add(:text, I18n.t('statuses.over_character_limit', max: MAX_CHARS)) if too_long?
   end
 
   private
 
-  def too_long?(status)
-    countable_length(status) > MAX_CHARS
+  def too_long?
+    countable_length > MAX_CHARS
   end
 
-  def countable_length(status)
-    total_text(status).mb_chars.grapheme_length
+  def countable_length
+    total_text.mb_chars.grapheme_length
   end
 
-  def total_text(status)
-    [status.spoiler_text, countable_text(status)].join
+  def total_text
+    [@status.spoiler_text, countable_text].join
   end
 
-  def countable_text(status)
-    return '' if status.text.nil?
+  def countable_text
+    return '' if @status.text.nil?
 
-    status.text.dup.tap do |new_text|
+    @status.text.dup.tap do |new_text|
       new_text.gsub!(FetchLinkCardService::URL_PATTERN, 'x' * 23)
       new_text.gsub!(Account::MENTION_RE, '@\2')
     end