Sha256: dbc0ff923cb47e0b98b8ab08cf7ca44bee7ce2d3a40b476272667690841ab4a1

Contents?: true

Size: 1.8 KB

Versions: 2

Compression:

Stored size: 1.8 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] || 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

2 entries across 2 versions & 1 rubygems

Version Path
cloudtasker-0.2.0 lib/cloudtasker/unique_job/lock/base_lock.rb
cloudtasker-0.1.0 lib/cloudtasker/unique_job/lock/base_lock.rb