32 lines
761 B
Ruby
32 lines
761 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
class BatchWorkerContext
|
|
def initialize(objects, arguments_proc:, context_proc:)
|
|
@objects = objects
|
|
@arguments_proc = arguments_proc
|
|
@context_proc = context_proc
|
|
end
|
|
|
|
def arguments
|
|
context_by_arguments.keys
|
|
end
|
|
|
|
def context_for(arguments)
|
|
context_by_arguments[arguments]
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :objects, :arguments_proc, :context_proc
|
|
|
|
def context_by_arguments
|
|
@context_by_arguments ||= objects.each_with_object({}) do |object, result|
|
|
arguments = Array.wrap(arguments_proc.call(object))
|
|
context = Gitlab::ApplicationContext.new(**context_proc.call(object))
|
|
|
|
result[arguments] = context
|
|
end
|
|
end
|
|
end
|
|
end
|