class ActiveJob::Uniqueness::LockKey

Constants

FALLBACK_ARGUMENTS_STRING

Attributes

arguments[R]
job_class_name[R]

Public Class Methods

new(job_class_name: nil, arguments: nil) click to toggle source
# File lib/active_job/uniqueness/lock_key.rb, line 14
def initialize(job_class_name: nil, arguments: nil)
  if arguments.present? && job_class_name.blank?
    raise ArgumentError, 'job_class_name is required if arguments given'
  end

  @job_class_name = job_class_name
  @arguments = arguments || []
end

Public Instance Methods

lock_key() click to toggle source
# File lib/active_job/uniqueness/lock_key.rb, line 23
def lock_key
  [
    lock_prefix,
    normalized_job_class_name,
    arguments_key_part
  ].join(':')
end
wildcard_key() click to toggle source
# File lib/active_job/uniqueness/lock_key.rb, line 31
def wildcard_key
  [
    lock_prefix,
    normalized_job_class_name,
    arguments.any? ? arguments_key_part + '*' : '*'
  ].compact.join(':')
end

Private Instance Methods

arguments_digest() click to toggle source
# File lib/active_job/uniqueness/lock_key.rb, line 51
def arguments_digest
  digest_method.hexdigest(serialized_arguments)
end
arguments_key_part() click to toggle source
# File lib/active_job/uniqueness/lock_key.rb, line 41
def arguments_key_part
  arguments.any? ? arguments_digest : FALLBACK_ARGUMENTS_STRING
end
normalized_job_class_name() click to toggle source
# File lib/active_job/uniqueness/lock_key.rb, line 55
def normalized_job_class_name
  job_class_name&.underscore
end
serialized_arguments() click to toggle source

ActiveJob::Arguments is used to reflect the way ActiveJob serializes arguments in order to serialize ActiveRecord models with GlobalID uuids instead of as_json which could give undesired artifacts

# File lib/active_job/uniqueness/lock_key.rb, line 47
def serialized_arguments
  ActiveSupport::JSON.encode(ActiveJob::Arguments.serialize(arguments))
end