38 lines
		
	
	
		
			822 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			822 B
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module Gitlab
 | |
|   class SafeRequestPurger
 | |
|     def self.execute(args)
 | |
|       new(**args).execute
 | |
|     end
 | |
| 
 | |
|     def initialize(resource_key:, resource_ids:)
 | |
|       @resource_key = resource_key
 | |
|       @resource_ids = resource_ids.uniq
 | |
|       @resource_data = {}
 | |
|     end
 | |
| 
 | |
|     def execute
 | |
|       load_resource_data
 | |
|       purge_resource_ids
 | |
|       write_resource_data_to_store
 | |
|     end
 | |
| 
 | |
|     private
 | |
| 
 | |
|     attr_reader :resource_key, :resource_ids, :resource_data
 | |
| 
 | |
|     def load_resource_data
 | |
|       @resource_data = Gitlab::SafeRequestStore.fetch(resource_key) { resource_data }
 | |
|     end
 | |
| 
 | |
|     def purge_resource_ids
 | |
|       @resource_data.delete_if { |id| resource_ids.include?(id) }
 | |
|     end
 | |
| 
 | |
|     def write_resource_data_to_store
 | |
|       Gitlab::SafeRequestStore.write(resource_key, resource_data)
 | |
|     end
 | |
|   end
 | |
| end
 |