Sha256: cb9238d1c07e5200153c461b38f5c404b0fdf66df1699bcda2efe319600db59e

Contents?: true

Size: 996 Bytes

Versions: 1

Compression:

Stored size: 996 Bytes

Contents

module SidekiqUniqueJobs
  module Lock
    class TimeCalculator
      def self.for_item(item)
        new(item)
      end

      def initialize(item)
        @item = item
      end

      def seconds
        time_until_scheduled + unique_expiration
      end

      def time_until_scheduled
        scheduled = item['at'.freeze]
        return 0 unless scheduled
        (Time.at(scheduled) - Time.now.utc).to_i
      end

      def unique_expiration
        @unique_expiration ||=
          (
            worker_class_unique_expiration ||
            SidekiqUniqueJobs.config.default_expiration
          ).to_i
      end

      def worker_class_unique_expiration
        return unless worker_class.respond_to?(:get_sidekiq_options)
        worker_class.get_sidekiq_options['unique_expiration'.freeze]
      end

      def worker_class
        @worker_class ||= SidekiqUniqueJobs.worker_class_constantize(item['class'.freeze])
      end

      private

      attr_reader :item
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sidekiq-unique-jobs-4.0.0 lib/sidekiq_unique_jobs/lock/time_calculator.rb