Sha256: 88e08d209ba417ab1e6f882f2f46ea4e30844065de660ad1c592f280d1c785f5

Contents?: true

Size: 874 Bytes

Versions: 11

Compression:

Stored size: 874 Bytes

Contents

# encoding: UTF-8
require 'active_support/concern'

module RocketJob
  module Plugins
    # Prevent more than one instance of this job class from running at a time
    module Singleton
      extend ActiveSupport::Concern

      included do
        # Validation prevents a new job from being saved while one is already running
        validates_each :state do |record, attr, value|
          if (record.running? || record.queued? || record.paused?) && record.rocket_job_singleton_active?
            record.errors.add(attr, "Another instance of #{record.class.name} is already queued or running")
          end
        end

        # Returns [true|false] whether another instance of this job is already active
        def rocket_job_singleton_active?
          self.class.where(:state.in => [:running, :queued], :id.ne => id).exists?
        end
      end

    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
rocketjob-3.0.1 lib/rocket_job/plugins/singleton.rb
rocketjob-3.0.0 lib/rocket_job/plugins/singleton.rb
rocketjob-3.0.0.rc5 lib/rocket_job/plugins/singleton.rb
rocketjob-3.0.0.rc4 lib/rocket_job/plugins/singleton.rb
rocketjob-3.0.0.rc3 lib/rocket_job/plugins/singleton.rb
rocketjob-3.0.0.rc2 lib/rocket_job/plugins/singleton.rb
rocketjob-3.0.0.rc1 lib/rocket_job/plugins/singleton.rb
rocketjob-3.0.0.beta3 lib/rocket_job/plugins/singleton.rb
rocketjob-3.0.0.beta2 lib/rocket_job/plugins/singleton.rb
rocketjob-3.0.0.beta lib/rocket_job/plugins/singleton.rb
rocketjob-3.0.0.alpha lib/rocket_job/plugins/singleton.rb