2016-08-06 12:41:18 -04:00
require_relative " ../support/job_buffer "
require " active_support/core_ext/integer/inflections "
2016-07-29 16:54:55 -04:00
2016-08-01 19:09:16 -04:00
class DefaultsError < StandardError ; end
2016-08-02 17:26:56 -04:00
class LongWaitError < StandardError ; end
2016-08-01 19:09:16 -04:00
class ShortWaitTenAttemptsError < StandardError ; end
2016-08-01 19:44:29 -04:00
class ExponentialWaitTenAttemptsError < StandardError ; end
class CustomWaitTenAttemptsError < StandardError ; end
2016-08-01 19:51:11 -04:00
class CustomCatchError < StandardError ; end
2016-08-01 19:09:16 -04:00
class DiscardableError < StandardError ; end
2016-07-29 16:54:55 -04:00
class RetryJob < ActiveJob :: Base
2016-08-01 19:09:16 -04:00
retry_on DefaultsError
2016-08-02 17:26:56 -04:00
retry_on LongWaitError , wait : 1 . hour , attempts : 10
2016-08-01 19:09:16 -04:00
retry_on ShortWaitTenAttemptsError , wait : 1 . second , attempts : 10
2016-08-01 19:44:29 -04:00
retry_on ExponentialWaitTenAttemptsError , wait : :exponentially_longer , attempts : 10
retry_on CustomWaitTenAttemptsError , wait : - > ( executions ) { executions * 2 } , attempts : 10
2016-08-16 19:01:59 -04:00
retry_on ( CustomCatchError ) { | job , exception | JobBuffer . add ( " Dealt with a job that failed to retry in a custom way after #{ job . arguments . second } attempts " ) }
2016-08-01 19:09:16 -04:00
discard_on DiscardableError
2016-07-29 16:54:55 -04:00
def perform ( raising , attempts )
if executions < attempts
JobBuffer . add ( " Raised #{ raising } for the #{ executions . ordinalize } time " )
raise raising . constantize
else
JobBuffer . add ( " Successfully completed job " )
end
end
end