Sha256: 51f75e0bfa7b8798a47a6f330141eb7281588a0be74f724ec163f28060fd225e

Contents?: true

Size: 1.77 KB

Versions: 51

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

module Cloudtasker
  module UniqueJob
    module Lock
      # Base behaviour for locks
      class BaseLock
        attr_reader :job

        #
        # Build a new instance of the class.
        #
        # @param [Cloudtasker::UniqueJob::Job] job The UniqueJob job
        #
        def initialize(job)
          @job = job
        end

        #
        # Return the worker configuration options.
        #
        # @return [Hash] The worker configuration options.
        #
        def options
          job.options
        end

        #
        # Return the strategy to use by default. Can be overriden in each lock.
        #
        # @return [Cloudtasker::UniqueJob::ConflictStrategy::BaseStrategy] The strategy to use by default.
        #
        def default_conflict_strategy
          ConflictStrategy::Reject
        end

        #
        # Return the conflict strategy to use on conflict
        #
        # @return [Cloudtasker::UniqueJob::ConflictStrategy::BaseStrategy] The instantiated strategy.
        #
        def conflict_instance
          @conflict_instance ||=
            begin
              # Infer lock class and get instance
              strategy_name = options[:on_conflict]
              strategy_klass = ConflictStrategy.const_get(strategy_name.to_s.split('_').collect(&:capitalize).join)
              strategy_klass.new(job)
            rescue NameError
              default_conflict_strategy.new(job)
            end
        end

        #
        # Lock logic invoked when a job is scheduled (client middleware).
        #
        def schedule
          yield
        end

        #
        # Lock logic invoked when a job is executed (server middleware).
        #
        def execute
          yield
        end
      end
    end
  end
end

Version data entries

51 entries across 51 versions & 1 rubygems

Version Path
cloudtasker-0.14.0 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.14.rc1 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.13.2 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.13.1 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.13.0 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.13.rc2 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.13.rc1 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.12.2 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.12.1 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.11.1 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.10.2 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.9.5 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.12.0 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.12.rc11 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.12.rc10 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.12.rc9 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.12.rc8 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.12.rc7 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.12.rc6 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.12.rc5 lib/cloudtasker/unique_job/lock/base_lock.rb