Sha256: 3b7413b8e6cbe79e1a66baa298bfb9e3fd679ba4d5bd6ec7a948007c9742a127

Contents?: true

Size: 1.04 KB

Versions: 9

Compression:

Stored size: 1.04 KB

Contents

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

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

    def call
      worker.send(method_name, 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

9 entries across 9 versions & 1 rubygems

Version Path
background_worker-0.7.0 lib/background_worker/worker_execution.rb
background_worker-0.6.0 lib/background_worker/worker_execution.rb
background_worker-0.5.0 lib/background_worker/worker_execution.rb
background_worker-0.4.0 lib/background_worker/worker_execution.rb
background_worker-0.3.0 lib/background_worker/worker_execution.rb
background_worker-0.2.1 lib/background_worker/worker_execution.rb
background_worker-0.2.0 lib/background_worker/worker_execution.rb
background_worker-0.1.0 lib/background_worker/worker_execution.rb
background_worker-0.0.5 lib/background_worker/worker_execution.rb