From 4ecfbd392083631d773fff950b281de038112e84 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 10 Jul 2025 03:13:22 -0400 Subject: [PATCH] Add `Status.only_polls` (and without polls) scope (#35330) --- app/lib/annual_report/archetype.rb | 2 +- app/models/account_statuses_cleanup_policy.rb | 2 +- app/models/status.rb | 2 ++ spec/models/status_spec.rb | 22 +++++++++++++++++++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/app/lib/annual_report/archetype.rb b/app/lib/annual_report/archetype.rb index ff7e14e2a..a02dbf7db 100644 --- a/app/lib/annual_report/archetype.rb +++ b/app/lib/annual_report/archetype.rb @@ -28,7 +28,7 @@ class AnnualReport::Archetype < AnnualReport::Source end def polls_count - @polls_count ||= report_statuses.where.not(poll_id: nil).count + @polls_count ||= report_statuses.only_polls.count end def reblogs_count diff --git a/app/models/account_statuses_cleanup_policy.rb b/app/models/account_statuses_cleanup_policy.rb index ef41bb3ee..0915003c8 100644 --- a/app/models/account_statuses_cleanup_policy.rb +++ b/app/models/account_statuses_cleanup_policy.rb @@ -161,7 +161,7 @@ class AccountStatusesCleanupPolicy < ApplicationRecord end def without_poll_scope - Status.where(poll_id: nil) + Status.without_polls end def without_popular_scope diff --git a/app/models/status.rb b/app/models/status.rb index 4aac3b62d..bf392317a 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -121,6 +121,8 @@ class Status < ApplicationRecord scope :without_replies, -> { not_reply.or(reply_to_account) } scope :not_reply, -> { where(reply: false) } scope :only_reblogs, -> { where.not(reblog_of_id: nil) } + scope :only_polls, -> { where.not(poll_id: nil) } + scope :without_polls, -> { where(poll_id: nil) } scope :reply_to_account, -> { where(arel_table[:in_reply_to_account_id].eq arel_table[:account_id]) } scope :without_reblogs, -> { where(statuses: { reblog_of_id: nil }) } scope :tagged_with, ->(tag_ids) { joins(:statuses_tags).where(statuses_tags: { tag_id: tag_ids }) } diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index e6c49f101..f3453b3b6 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -363,6 +363,28 @@ RSpec.describe Status do end end + describe '.only_polls' do + let!(:poll_status) { Fabricate :status, poll: Fabricate(:poll) } + let!(:no_poll_status) { Fabricate :status } + + it 'returns the expected statuses' do + expect(described_class.only_polls) + .to include(poll_status) + .and not_include(no_poll_status) + end + end + + describe '.without_polls' do + let!(:poll_status) { Fabricate :status, poll: Fabricate(:poll) } + let!(:no_poll_status) { Fabricate :status } + + it 'returns the expected statuses' do + expect(described_class.without_polls) + .to not_include(poll_status) + .and include(no_poll_status) + end + end + describe '.tagged_with' do let(:tag_cats) { Fabricate(:tag, name: 'cats') } let(:tag_dogs) { Fabricate(:tag, name: 'dogs') }