about summary refs log tree commit diff
path: root/app/models
diff options
context:
space:
mode:
authorThibaut Girka <thib@sitedethib.com>2020-11-12 22:13:57 +0100
committerThibaut Girka <thib@sitedethib.com>2020-11-12 22:13:57 +0100
commitc077cdaba70eac154909cad412ece409acc2e688 (patch)
tree7d13d319ce62475de15014406635f32a8742ca4b /app/models
parent67125534bc0fd48a45d6cb17a5c78712d8e87150 (diff)
parent9870b175b477bbc984fc7945f1ebe07e3f2b0053 (diff)
Merge branch 'master' into glitch-soc/merge-upstream
Conflicts:
- `app/controllers/relationships_controller.rb`:
  Upstream changed a line too close to a glitch-soc only line related to
  glitch-soc's theming system.
  Applied upstream changes accordingly.
Diffstat (limited to 'app/models')
-rw-r--r--app/models/account_stat.rb25
-rw-r--r--app/models/form/account_batch.rb8
-rw-r--r--app/models/tag.rb2
3 files changed, 24 insertions, 11 deletions
diff --git a/app/models/account_stat.rb b/app/models/account_stat.rb
index c84e4217c..e70b54d79 100644
--- a/app/models/account_stat.rb
+++ b/app/models/account_stat.rb
@@ -21,26 +21,26 @@ class AccountStat < ApplicationRecord
 
   def increment_count!(key)
     update(attributes_for_increment(key))
-  rescue ActiveRecord::StaleObjectError
+  rescue ActiveRecord::StaleObjectError, ActiveRecord::RecordNotUnique
     begin
       reload_with_id
     rescue ActiveRecord::RecordNotFound
-      # Nothing to do
-    else
-      retry
+      return
     end
+
+    retry
   end
 
   def decrement_count!(key)
-    update(key => [public_send(key) - 1, 0].max)
-  rescue ActiveRecord::StaleObjectError
+    update(attributes_for_decrement(key))
+  rescue ActiveRecord::StaleObjectError, ActiveRecord::RecordNotUnique
     begin
       reload_with_id
     rescue ActiveRecord::RecordNotFound
-      # Nothing to do
-    else
-      retry
+      return
     end
+
+    retry
   end
 
   private
@@ -51,8 +51,13 @@ class AccountStat < ApplicationRecord
     attrs
   end
 
+  def attributes_for_decrement(key)
+    attrs = { key => [public_send(key) - 1, 0].max }
+    attrs
+  end
+
   def reload_with_id
-    self.id = find_by!(account: account).id if new_record?
+    self.id = self.class.find_by!(account: account).id if new_record?
     reload
   end
 end
diff --git a/app/models/form/account_batch.rb b/app/models/form/account_batch.rb
index 7b9e40f68..882770d7c 100644
--- a/app/models/form/account_batch.rb
+++ b/app/models/form/account_batch.rb
@@ -9,6 +9,8 @@ class Form::AccountBatch
 
   def save
     case action
+    when 'follow'
+      follow!
     when 'unfollow'
       unfollow!
     when 'remove_from_followers'
@@ -24,6 +26,12 @@ class Form::AccountBatch
 
   private
 
+  def follow!
+    accounts.find_each do |target_account|
+      FollowService.new.call(current_account, target_account)
+    end
+  end
+
   def unfollow!
     accounts.find_each do |target_account|
       UnfollowService.new.call(current_account, target_account)
diff --git a/app/models/tag.rb b/app/models/tag.rb
index df2f86d95..bb93a52e2 100644
--- a/app/models/tag.rb
+++ b/app/models/tag.rb
@@ -126,7 +126,7 @@ class Tag < ApplicationRecord
     end
 
     def search_for(term, limit = 5, offset = 0, options = {})
-      normalized_term = normalize(term.strip).mb_chars.downcase.to_s
+      normalized_term = normalize(term.strip)
       pattern         = sanitize_sql_like(normalized_term) + '%'
       query           = Tag.listable.where(arel_table[:name].lower.matches(pattern))
       query           = query.where(arel_table[:name].lower.eq(normalized_term).or(arel_table[:reviewed_at].not_eq(nil))) if options[:exclude_unreviewed]