class RedisLock
  class Strategy
    attr_reader :lock, :args

    def initialize(lock, args = {})
      @lock = lock
      @args = args
    end

    def call(&block)
      raise NotImplementedError
    end

    def after_perform
    end

    private

    def _perform(&block)
      yield lock
    rescue => e
      lock.config.logger.error "[#{self.class}] key: `#{key}` error:"
      lock.config.logger.error e
      raise e
    ensure
      after_perform
    end
  end
end