module ActiveJob::ConcurrencyControls
def compute_concurrency_parameter(option)
def compute_concurrency_parameter(option) case option when String, Symbol option.to_s when Proc instance_exec(*arguments, &option) end end
def concurrency_group
def concurrency_group compute_concurrency_parameter(self.class.concurrency_group) end
def concurrency_key
def concurrency_key if self.class.concurrency_key param = compute_concurrency_parameter(self.class.concurrency_key) case param when ActiveRecord::Base [ concurrency_group, param.class.name, param.id ] else [ concurrency_group, param ] end.compact.join("/") end end
def concurrency_limited?
def concurrency_limited? concurrency_key.present? end
def limits_concurrency(key:, to: 1, group: DEFAULT_CONCURRENCY_GROUP, duration: SolidQueue.default_concurrency_control_period)
def limits_concurrency(key:, to: 1, group: DEFAULT_CONCURRENCY_GROUP, duration: SolidQueue.default_concurrency_control_period) self.concurrency_key = key self.concurrency_limit = to self.concurrency_group = group self.concurrency_duration = duration end