summaryrefslogtreecommitdiff
path: root/lib/gitlab/safe_request_purger.rb
blob: b8795f1cc883f67c9da10ca1d4bbf4893c08500b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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