Add CustomFilter.unexpired scope (#29896)
				
					
				
			This commit is contained in:
		@@ -42,6 +42,7 @@ class CustomFilter < ApplicationRecord
 | 
			
		||||
  validate :context_must_be_valid
 | 
			
		||||
 | 
			
		||||
  normalizes :context, with: ->(context) { context.map(&:strip).filter_map(&:presence) }
 | 
			
		||||
  scope :unexpired, -> { where(expires_at: nil).or where.not(expires_at: ..Time.zone.now) }
 | 
			
		||||
 | 
			
		||||
  before_save :prepare_cache_invalidation!
 | 
			
		||||
  before_destroy :prepare_cache_invalidation!
 | 
			
		||||
@@ -66,14 +67,16 @@ class CustomFilter < ApplicationRecord
 | 
			
		||||
    active_filters = Rails.cache.fetch("filters:v3:#{account_id}") do
 | 
			
		||||
      filters_hash = {}
 | 
			
		||||
 | 
			
		||||
      scope = CustomFilterKeyword.includes(:custom_filter).where(custom_filter: { account_id: account_id }).where(Arel.sql('expires_at IS NULL OR expires_at > NOW()'))
 | 
			
		||||
      scope = CustomFilterKeyword.left_outer_joins(:custom_filter).merge(unexpired.where(account_id: account_id))
 | 
			
		||||
 | 
			
		||||
      scope.to_a.group_by(&:custom_filter).each do |filter, keywords|
 | 
			
		||||
        keywords.map!(&:to_regex)
 | 
			
		||||
 | 
			
		||||
        filters_hash[filter.id] = { keywords: Regexp.union(keywords), filter: filter }
 | 
			
		||||
      end.to_h
 | 
			
		||||
 | 
			
		||||
      scope = CustomFilterStatus.includes(:custom_filter).where(custom_filter: { account_id: account_id }).where(Arel.sql('expires_at IS NULL OR expires_at > NOW()'))
 | 
			
		||||
      scope = CustomFilterStatus.left_outer_joins(:custom_filter).merge(unexpired.where(account_id: account_id))
 | 
			
		||||
 | 
			
		||||
      scope.to_a.group_by(&:custom_filter).each do |filter, statuses|
 | 
			
		||||
        filters_hash[filter.id] ||= { filter: filter }
 | 
			
		||||
        filters_hash[filter.id].merge!(status_ids: statuses.map(&:status_id))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user