scope :without_reblogs, -> { where('statuses.reblog_of_id IS NULL') }
scope :with_public_visibility, -> { where(visibility: :public) }
scope :tagged_with, ->(tag) { joins(:statuses_tags).where(statuses_tags: { tag_id: tag }) }
- scope :local_only, -> { left_outer_joins(:account).where(accounts: { domain: nil }) }
scope :excluding_silenced_accounts, -> { left_outer_joins(:account).where(accounts: { silenced: false }) }
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) }
private
def timeline_scope(local_only = false)
- starting_scope = local_only ? Status.local_only : Status
+ starting_scope = local_only ? Status.local : Status
starting_scope
.with_public_visibility
.without_reblogs
end
end
- describe '.local_only' do
- it 'returns only statuses from local accounts' do
- local_account = Fabricate(:account, domain: nil)
- remote_account = Fabricate(:account, domain: 'test.com')
- local_status = Fabricate(:status, account: local_account)
- remote_status = Fabricate(:status, account: remote_account)
-
- results = described_class.local_only
- expect(results).to include(local_status)
- expect(results).not_to include(remote_status)
- end
- end
-
describe '.as_home_timeline' do
let(:account) { Fabricate(:account) }
let(:followed) { Fabricate(:account) }