Sha256: 62c842ca1344ebe9c1899702a4d47879282ae17fe75777783b1da75b9731165c

Contents?: true

Size: 1.53 KB

Versions: 7

Compression:

Stored size: 1.53 KB

Contents

class Marty::PromiseRubyJob < Struct.new(:promise,
                                         :title,
                                         :module_name,
                                         :method_name,
                                         :method_args,
                                         :hook,
                                         :max_run_time
                                        )

  def enqueue(job)
    config = Rails.configuration.marty
    hooks = config.promise_job_enqueue_hooks

    return if hooks.blank?

    hooks.each do |hook|
      hook.call(job)
    end
  end

  def perform
    promise.set_start

    begin
      Mcfly.whodunnit = promise.user

      ENV['__promise_id'] = promise.id.to_s
      mod = module_name.constantize
      res = { 'result' => mod.send(method_name, *method_args) }
    rescue ::Delayed::WorkerTimeout => e
      msg = ::Marty::Promise.timeout_message(promise)
      timeout_error = StandardError.new(
        "#{msg} (Triggered by #{e.class})"
      )
      timeout_error.set_backtrace(e.backtrace)

      res = Delorean::Engine.grok_runtime_exception(timeout_error)
    rescue StandardError => e
      res = ::Marty::Promise.exception_to_result(promise: promise, exception: e)
    end

    promise.set_result(res)
    process_hook(res)
    ENV.delete('__promise_id')
  end

  def process_hook(res)
    return unless hook

    hook.run(params: method_args, result: res)
  rescue StandardError => e
    Marty::Util.logger.error "promise hook failed: #{e}"
  end

  def max_attempts
    1
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
marty-14.3.0 lib/marty/promise_ruby_job.rb
marty-14.0.0 lib/marty/promise_ruby_job.rb
marty-13.0.2 lib/marty/promise_ruby_job.rb
marty-11.0.0 lib/marty/promise_ruby_job.rb
marty-10.0.3 lib/marty/promise_ruby_job.rb
marty-10.0.2 lib/marty/promise_ruby_job.rb
marty-10.0.0 lib/marty/promise_ruby_job.rb