class SidekiqUniqueJobs::Middleware::Server::UniqueJobs

def after_yield?

def after_yield?
  unlock_order == :after_yield
end

def before_yield?

def before_yield?
  unlock_order == :before_yield
end

def call(worker, item, _queue, redis_pool = nil)

def call(worker, item, _queue, redis_pool = nil)
  @redis_pool = redis_pool
  decide_unlock_order(worker.class)
  lock_key = payload_hash(item)
  unlocked = before_yield? ? unlock(lock_key).inspect : 0
  yield
ensure
  if after_yield? || !defined? unlocked || unlocked != 1
    unlock(lock_key)
  end
end

def connection(&block)

def connection(&block)
  SidekiqUniqueJobs::Connectors.connection(redis_pool, &block)
end

def decide_unlock_order(klass)

def decide_unlock_order(klass)
  @unlock_order = if unlock_order_configured?(klass)
                    klass.get_sidekiq_options['unique_unlock_order']
                  else
                    default_unlock_order
                  end
end

def default_unlock_order

def default_unlock_order
  SidekiqUniqueJobs.config.default_unlock_order
end

def logger

def logger
  Sidekiq.logger
end

def payload_hash(item)

def payload_hash(item)
  SidekiqUniqueJobs::PayloadHelper.get_payload(item['class'], item['queue'], item['args'])
end

def unlock(payload_hash)

def unlock(payload_hash)
  connection { |c| c.del(payload_hash) }
end

def unlock_order_configured?(klass)

def unlock_order_configured?(klass)
  klass.respond_to?(:get_sidekiq_options) &&
    !klass.get_sidekiq_options['unique_unlock_order'].nil?
end