49 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
class AccountSuggestions::SettingSource < AccountSuggestions::Source
 | 
						|
  def get(account, limit: DEFAULT_LIMIT)
 | 
						|
    if setting_enabled?
 | 
						|
      base_account_scope(account).merge(setting_to_where_condition).limit(limit).pluck(:id).zip([key].cycle)
 | 
						|
    else
 | 
						|
      []
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def key
 | 
						|
    :featured
 | 
						|
  end
 | 
						|
 | 
						|
  def usernames_and_domains
 | 
						|
    @usernames_and_domains ||= setting_to_usernames_and_domains
 | 
						|
  end
 | 
						|
 | 
						|
  def setting_enabled?
 | 
						|
    setting.present?
 | 
						|
  end
 | 
						|
 | 
						|
  def setting_to_where_condition
 | 
						|
    usernames_and_domains.map do |(username, domain)|
 | 
						|
      Account
 | 
						|
        .with_username(username)
 | 
						|
        .with_domain(domain)
 | 
						|
    end.reduce(:or)
 | 
						|
  end
 | 
						|
 | 
						|
  def setting_to_usernames_and_domains
 | 
						|
    setting.split(',').filter_map do |str|
 | 
						|
      username, domain = str.strip.gsub(/\A@/, '').split('@', 2)
 | 
						|
      domain           = nil if TagManager.instance.local_domain?(domain)
 | 
						|
 | 
						|
      next if username.blank?
 | 
						|
 | 
						|
      [username.downcase, domain&.downcase]
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def setting
 | 
						|
    Setting.bootstrap_timeline_accounts
 | 
						|
  end
 | 
						|
end
 |