Add `not_featured_by` scope to Tag (#28815)
parent
1d3ecd3fba
commit
650c548c31
|
@ -12,10 +12,6 @@ class Api::V1::FeaturedTags::SuggestionsController < Api::BaseController
|
|||
private
|
||||
|
||||
def set_recently_used_tags
|
||||
@recently_used_tags = Tag.recently_used(current_account).where.not(id: featured_tag_ids).limit(10)
|
||||
end
|
||||
|
||||
def featured_tag_ids
|
||||
current_account.featured_tags.pluck(:tag_id)
|
||||
@recently_used_tags = Tag.suggestions_for_account(current_account).limit(10)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -38,7 +38,7 @@ class Settings::FeaturedTagsController < Settings::BaseController
|
|||
end
|
||||
|
||||
def set_recently_used_tags
|
||||
@recently_used_tags = Tag.recently_used(current_account).where.not(id: @featured_tags.map(&:id)).limit(10)
|
||||
@recently_used_tags = Tag.suggestions_for_account(current_account).limit(10)
|
||||
end
|
||||
|
||||
def featured_tag_params
|
||||
|
|
|
@ -53,6 +53,8 @@ class Tag < ApplicationRecord
|
|||
scope :listable, -> { where(listable: [true, nil]) }
|
||||
scope :trendable, -> { Setting.trendable_by_default ? where(trendable: [true, nil]) : where(trendable: true) }
|
||||
scope :not_trendable, -> { where(trendable: false) }
|
||||
scope :suggestions_for_account, ->(account) { recently_used(account).not_featured_by(account) }
|
||||
scope :not_featured_by, ->(account) { where.not(id: account.featured_tags.select(:tag_id)) }
|
||||
scope :recently_used, lambda { |account|
|
||||
joins(:statuses)
|
||||
.where(statuses: { id: account.statuses.select(:id).limit(RECENT_STATUS_LIMIT) })
|
||||
|
|
|
@ -142,6 +142,25 @@ RSpec.describe Tag do
|
|||
end
|
||||
end
|
||||
|
||||
describe '.not_featured_by' do
|
||||
let!(:account) { Fabricate(:account) }
|
||||
let!(:fun) { Fabricate(:tag, name: 'fun') }
|
||||
let!(:games) { Fabricate(:tag, name: 'games') }
|
||||
|
||||
before do
|
||||
Fabricate :featured_tag, account: account, name: 'games'
|
||||
Fabricate :featured_tag, name: 'fun'
|
||||
end
|
||||
|
||||
it 'returns tags not featured by the account' do
|
||||
results = described_class.not_featured_by(account)
|
||||
|
||||
expect(results)
|
||||
.to include(fun)
|
||||
.and not_include(games)
|
||||
end
|
||||
end
|
||||
|
||||
describe '.matches_name' do
|
||||
it 'returns tags for multibyte case-insensitive names' do
|
||||
upcase_string = 'abcABCabcABCやゆよ'
|
||||
|
|
Loading…
Reference in New Issue