Refactor StatusThreadingConcern (#9626)
* Remove #filter_from_context? * Create scope Status.with_accounts Retrieving AR objects should be their model's scope
This commit is contained in:
		
							parent
							
								
									1d3f85f036
								
							
						
					
					
						commit
						312c00ca35
					
				
					 2 changed files with 3 additions and 10 deletions
				
			
		| 
						 | 
					@ -81,12 +81,12 @@ module StatusThreadingConcern
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def find_statuses_from_tree_path(ids, account, promote: false)
 | 
					  def find_statuses_from_tree_path(ids, account, promote: false)
 | 
				
			||||||
    statuses    = statuses_with_accounts(ids).to_a
 | 
					    statuses    = Status.with_accounts(ids).to_a
 | 
				
			||||||
    account_ids = statuses.map(&:account_id).uniq
 | 
					    account_ids = statuses.map(&:account_id).uniq
 | 
				
			||||||
    domains     = statuses.map(&:account_domain).compact.uniq
 | 
					    domains     = statuses.map(&:account_domain).compact.uniq
 | 
				
			||||||
    relations   = relations_map_for_account(account, account_ids, domains)
 | 
					    relations   = relations_map_for_account(account, account_ids, domains)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    statuses.reject! { |status| filter_from_context?(status, account, relations) }
 | 
					    statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Order ancestors/descendants by tree path
 | 
					    # Order ancestors/descendants by tree path
 | 
				
			||||||
    statuses.sort_by! { |status| ids.index(status.id) }
 | 
					    statuses.sort_by! { |status| ids.index(status.id) }
 | 
				
			||||||
| 
						 | 
					@ -125,12 +125,4 @@ module StatusThreadingConcern
 | 
				
			||||||
      domain_blocking_by_domain: Account.domain_blocking_map_by_domain(domains, account.id),
 | 
					      domain_blocking_by_domain: Account.domain_blocking_map_by_domain(domains, account.id),
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					 | 
				
			||||||
  def statuses_with_accounts(ids)
 | 
					 | 
				
			||||||
    Status.where(id: ids).includes(:account)
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def filter_from_context?(status, account, relations)
 | 
					 | 
				
			||||||
    StatusFilter.new(status, account, relations).filtered?
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -83,6 +83,7 @@ class Status < ApplicationRecord
 | 
				
			||||||
  scope :remote, -> { where(local: false).where.not(uri: nil) }
 | 
					  scope :remote, -> { where(local: false).where.not(uri: nil) }
 | 
				
			||||||
  scope :local,  -> { where(local: true).or(where(uri: nil)) }
 | 
					  scope :local,  -> { where(local: true).or(where(uri: nil)) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  scope :with_accounts, ->(ids) { where(id: ids).includes(:account) }
 | 
				
			||||||
  scope :without_replies, -> { where('statuses.reply = FALSE OR statuses.in_reply_to_account_id = statuses.account_id') }
 | 
					  scope :without_replies, -> { where('statuses.reply = FALSE OR statuses.in_reply_to_account_id = statuses.account_id') }
 | 
				
			||||||
  scope :without_reblogs, -> { where('statuses.reblog_of_id IS NULL') }
 | 
					  scope :without_reblogs, -> { where('statuses.reblog_of_id IS NULL') }
 | 
				
			||||||
  scope :with_public_visibility, -> { where(visibility: :public) }
 | 
					  scope :with_public_visibility, -> { where(visibility: :public) }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue