Sha256: 86e408e711cf0ea45cb593059731877e1be1813dfcb5b4b63009465772d2ddbd

Contents?: true

Size: 595 Bytes

Versions: 16

Compression:

Stored size: 595 Bytes

Contents

class BackgroundJob
  module Unique
    extend ActiveSupport::Concern

    DEFAULT_TIMEOUT = 10

    included do
      around_perform { |job, block| job.acquire_lock(&block) }
      cattr_accessor :lock_timeout
    end

    def acquire_lock(&block)
      mutex = Redis::Lock.new(
        lock_key(*arguments),
        Shipit.redis,
        expiration: self.class.timeout || DEFAULT_TIMEOUT,
        timeout: self.class.lock_timeout || 0,
      )
      mutex.lock(&block)
    end

    def lock_key(*args)
      ActiveJob::Arguments.serialize([self.class.name] + args).join('-')
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
shipit-engine-0.5.2 app/jobs/background_job/unique.rb
shipit-engine-0.5.1 app/jobs/background_job/unique.rb
shipit-engine-0.5.0 app/jobs/background_job/unique.rb
shipit-engine-0.4.10 app/jobs/background_job/unique.rb
shipit-engine-0.4.9 app/jobs/background_job/unique.rb
shipit-engine-0.4.8 app/jobs/background_job/unique.rb
shipit-engine-0.4.7 app/jobs/background_job/unique.rb
shipit-engine-0.4.6 app/jobs/background_job/unique.rb
shipit-engine-0.4.5 app/jobs/background_job/unique.rb
shipit-engine-0.4.4 app/jobs/background_job/unique.rb
shipit-engine-0.4.3 app/jobs/background_job/unique.rb
shipit-engine-0.4.2 app/jobs/background_job/unique.rb
shipit-engine-0.4.1 app/jobs/background_job/unique.rb
shipit-engine-0.4.0 app/jobs/background_job/unique.rb
shipit-engine-0.3.1 app/jobs/background_job/unique.rb
shipit-engine-0.3.0 app/jobs/background_job/unique.rb