]> cat aescling's git repositories - mastodon.git/commitdiff
Simplifying followers mappings
authorKurtis Rainbolt-Greene <me@kurtisrainboltgreene.name>
Sun, 8 Jan 2017 02:09:00 +0000 (18:09 -0800)
committerGitHub <noreply@github.com>
Sun, 8 Jan 2017 02:09:00 +0000 (18:09 -0800)
Deduplicating some logic and switching to pluck, to avoid pulling the entire model in memory.

app/models/account.rb

index 41fcc864b37daf77e27d220d2126f971666e6196..1b87210c7c791bc3cc203ebd699f45eab282a20a 100644 (file)
@@ -175,19 +175,23 @@ class Account < ApplicationRecord
     end
 
     def following_map(target_account_ids, account_id)
-      Follow.where(target_account_id: target_account_ids).where(account_id: account_id).map { |f| [f.target_account_id, true] }.to_h
+      follow_mapping(Follow.where(target_account_id: target_account_ids, account_id: account_id), :target_account_id)
     end
 
     def followed_by_map(target_account_ids, account_id)
-      Follow.where(account_id: target_account_ids).where(target_account_id: account_id).map { |f| [f.account_id, true] }.to_h
+      follow_mapping(Follow.where(account_id: target_account_ids, target_account_id: account_id), :account_id)
     end
 
     def blocking_map(target_account_ids, account_id)
-      Block.where(target_account_id: target_account_ids).where(account_id: account_id).map { |b| [b.target_account_id, true] }.to_h
+      follow_mapping(Block.where(target_account_id: target_account_ids, account_id: account_id), :target_account_id)
     end
 
     def requested_map(target_account_ids, account_id)
-      FollowRequest.where(target_account_id: target_account_ids).where(account_id: account_id).map { |r| [r.target_account_id, true] }.to_h
+      follow_mapping(FollowRequest.where(target_account_id: target_account_ids, account_id: account_id), :target_account_id)
+    end
+    
+    private def follow_mapping(query, field)
+      query.pluck(field).inject({}) { |mapping, id| mapping[id] = true }
     end
   end