about summary refs log tree commit diff
path: root/app/models/status.rb
diff options
context:
space:
mode:
authorThibG <thib@sitedethib.com>2018-11-09 22:29:52 +0100
committerGitHub <noreply@github.com>2018-11-09 22:29:52 +0100
commit09562b0fcc193d66f89a9f2c7eb2684e2e554d83 (patch)
tree87747f5dda99de033d15ec1319a7c188fa0df750 /app/models/status.rb
parent868cace7975532509c41800c7b6b9a6c7838a6b0 (diff)
parentc6fc3e0c65a0ae78e76ebb5da1a12a23727b72c8 (diff)
Merge pull request #806 from ThibG/glitch-soc/merge-upstream
Merge upstream changes
Diffstat (limited to 'app/models/status.rb')
-rw-r--r--app/models/status.rb11
1 files changed, 11 insertions, 0 deletions
diff --git a/app/models/status.rb b/app/models/status.rb
index f67a05b3c..e73f11503 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -85,6 +85,17 @@ class Status < ApplicationRecord
   scope :including_silenced_accounts, -> { left_outer_joins(:account).where(accounts: { silenced: true }) }
   scope :not_excluded_by_account, ->(account) { where.not(account_id: account.excluded_from_timeline_account_ids) }
   scope :not_domain_blocked_by_account, ->(account) { account.excluded_from_timeline_domains.blank? ? left_outer_joins(:account) : left_outer_joins(:account).where('accounts.domain IS NULL OR accounts.domain NOT IN (?)', account.excluded_from_timeline_domains) }
+  scope :tagged_with_all, ->(tags) {
+    Array(tags).map(&:id).map(&:to_i).reduce(self) do |result, id|
+      result.joins("INNER JOIN statuses_tags t#{id} ON t#{id}.status_id = statuses.id AND t#{id}.tag_id = #{id}")
+    end
+  }
+  scope :tagged_with_none, ->(tags) {
+    Array(tags).map(&:id).map(&:to_i).reduce(self) do |result, id|
+      result.joins("LEFT OUTER JOIN statuses_tags t#{id} ON t#{id}.status_id = statuses.id AND t#{id}.tag_id = #{id}")
+            .where("t#{id}.tag_id IS NULL")
+    end
+  }
 
   scope :not_local_only, -> { where(local_only: [false, nil]) }