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
|