Extract shared callback behaviour to CustomFilterCache concern (#29695)
				
					
				
			This commit is contained in:
		
							parent
							
								
									285a87a77f
								
							
						
					
					
						commit
						c0fe8a9f13
					
				
							
								
								
									
										17
									
								
								app/models/concerns/custom_filter_cache.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								app/models/concerns/custom_filter_cache.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  | 
 | ||||||
|  | module CustomFilterCache | ||||||
|  |   extend ActiveSupport::Concern | ||||||
|  | 
 | ||||||
|  |   included do | ||||||
|  |     after_commit :invalidate_cache! | ||||||
|  |     before_destroy :prepare_cache_invalidation! | ||||||
|  |     before_save :prepare_cache_invalidation! | ||||||
|  | 
 | ||||||
|  |     delegate( | ||||||
|  |       :invalidate_cache!, | ||||||
|  |       :prepare_cache_invalidation!, | ||||||
|  |       to: :custom_filter | ||||||
|  |     ) | ||||||
|  |   end | ||||||
|  | end | ||||||
| @ -13,16 +13,14 @@ | |||||||
| # | # | ||||||
| 
 | 
 | ||||||
| class CustomFilterKeyword < ApplicationRecord | class CustomFilterKeyword < ApplicationRecord | ||||||
|  |   include CustomFilterCache | ||||||
|  | 
 | ||||||
|   belongs_to :custom_filter |   belongs_to :custom_filter | ||||||
| 
 | 
 | ||||||
|   validates :keyword, presence: true |   validates :keyword, presence: true | ||||||
| 
 | 
 | ||||||
|   alias_attribute :phrase, :keyword |   alias_attribute :phrase, :keyword | ||||||
| 
 | 
 | ||||||
|   before_save :prepare_cache_invalidation! |  | ||||||
|   before_destroy :prepare_cache_invalidation! |  | ||||||
|   after_commit :invalidate_cache! |  | ||||||
| 
 |  | ||||||
|   def to_regex |   def to_regex | ||||||
|     if whole_word? |     if whole_word? | ||||||
|       /(?mix:#{to_regex_sb}#{Regexp.escape(keyword)}#{to_regex_eb})/ |       /(?mix:#{to_regex_sb}#{Regexp.escape(keyword)}#{to_regex_eb})/ | ||||||
| @ -40,12 +38,4 @@ class CustomFilterKeyword < ApplicationRecord | |||||||
|   def to_regex_eb |   def to_regex_eb | ||||||
|     /[[:word:]]\z/.match?(keyword) ? '\b' : '' |     /[[:word:]]\z/.match?(keyword) ? '\b' : '' | ||||||
|   end |   end | ||||||
| 
 |  | ||||||
|   def prepare_cache_invalidation! |  | ||||||
|     custom_filter.prepare_cache_invalidation! |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def invalidate_cache! |  | ||||||
|     custom_filter.invalidate_cache! |  | ||||||
|   end |  | ||||||
| end | end | ||||||
|  | |||||||
| @ -12,27 +12,17 @@ | |||||||
| # | # | ||||||
| 
 | 
 | ||||||
| class CustomFilterStatus < ApplicationRecord | class CustomFilterStatus < ApplicationRecord | ||||||
|  |   include CustomFilterCache | ||||||
|  | 
 | ||||||
|   belongs_to :custom_filter |   belongs_to :custom_filter | ||||||
|   belongs_to :status |   belongs_to :status | ||||||
| 
 | 
 | ||||||
|   validates :status, uniqueness: { scope: :custom_filter } |   validates :status, uniqueness: { scope: :custom_filter } | ||||||
|   validate :validate_status_access |   validate :validate_status_access | ||||||
| 
 | 
 | ||||||
|   before_save :prepare_cache_invalidation! |  | ||||||
|   before_destroy :prepare_cache_invalidation! |  | ||||||
|   after_commit :invalidate_cache! |  | ||||||
| 
 |  | ||||||
|   private |   private | ||||||
| 
 | 
 | ||||||
|   def validate_status_access |   def validate_status_access | ||||||
|     errors.add(:status_id, :invalid) unless StatusPolicy.new(custom_filter.account, status).show? |     errors.add(:status_id, :invalid) unless StatusPolicy.new(custom_filter.account, status).show? | ||||||
|   end |   end | ||||||
| 
 |  | ||||||
|   def prepare_cache_invalidation! |  | ||||||
|     custom_filter.prepare_cache_invalidation! |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def invalidate_cache! |  | ||||||
|     custom_filter.invalidate_cache! |  | ||||||
|   end |  | ||||||
| end | end | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user