Sha256: b9cbb077f793fcd6bc8ead9aa8c96dcc8514012acdbfb102046c9fd7ae6ba666

Contents?: true

Size: 1014 Bytes

Versions: 1

Compression:

Stored size: 1014 Bytes

Contents

module BackgroundWorker
  class WorkerExecution
    attr_reader :worker, :method_name, :options

    def initialize(worker, options)
      fail ArgumentError, "'uid' is required to identify worker" unless options[:uid].present?
      @worker = worker
      @options = options
    end

    def call
      worker.perform(options)
      report_implicitly_successful unless completed?

    rescue StandardError => e
      log_worker_error(e)
      BackgroundWorker.after_exception(e)

    ensure
      log_worker_finality
    end

    private

    def completed?
      worker.state.completed
    end

    def report_implicitly_successful
      worker.report_successful
    end

    def log_worker_error(e)
      worker.log("Implicit failure: Exception: #{e}", severity: :error)
      worker.report_failed("An unhandled error occurred: #{e}") unless completed?
    end

    def log_worker_finality
      worker.log "Final state: #{worker.state.data}"
      worker.log "Job was #{worker.state.status}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
background_worker-0.8.1 lib/background_worker/worker_execution.rb