# module Raven::Rails::ActiveJobExtensions

### Constants

ALREADY_SUPPORTED_SENTRY_ADAPTERS

### Public Class Methods

included(base) click to toggle source

    # File sentry-raven/lib/raven/integrations/rails/active_job.rb, line 9
    def self.included(base)
      base.class_eval do
        around_perform do |job, block|
          if already_supported_by_specific_integration?(job)
            block.call
          else
            capture_and_reraise_with_sentry(job, block)
          end
        end
      end
    end

### Public Instance Methods

already_supported_by_specific_integration?(job) click to toggle source

    # File sentry-raven/lib/raven/integrations/rails/active_job.rb, line 34
    def already_supported_by_specific_integration?(job)
      if ::Rails.version.to_f < 5.0
        ALREADY_SUPPORTED_SENTRY_ADAPTERS.include?(job.class.queue_adapter.to_s)
      else
        ALREADY_SUPPORTED_SENTRY_ADAPTERS.include?(job.class.queue_adapter.class.to_s)
      end
    end

capture_and_reraise_with_sentry(job, block) click to toggle source

    # File sentry-raven/lib/raven/integrations/rails/active_job.rb, line 21
    def capture_and_reraise_with_sentry(job, block)
      block.call
    rescue Exception => e # rubocop:disable Lint/RescueException
      rescue_handler_result = rescue_with_handler(e)
      return rescue_handler_result if rescue_handler_result

      Raven.capture_exception(e, :extra => raven_context(job))
      raise e
    ensure
      Context.clear!
      BreadcrumbBuffer.clear!
    end

raven_context(job) click to toggle source

    # File sentry-raven/lib/raven/integrations/rails/active_job.rb, line 42
    def raven_context(job)
      ctx = {
        :active_job => job.class.name,
        :arguments => job.arguments,
        :scheduled_at => job.scheduled_at,
        :job_id => job.job_id,
        :locale => job.locale
      }
      # Add provider_job_id details if Rails 5
      if job.respond_to?(:provider_job_id)
        ctx[:provider_job_id] = job.provider_job_id
      end

      ctx
    end