class Batsir::Strategies::RetryStrategy
Attributes
attempts[R]
retries[R]
Public Class Methods
new(context, retries = 3)
click to toggle source
Calls superclass method
# File lib/batsir/strategies/retry_strategy.rb, line 8 def initialize(context, retries = 3) super(context) @retries = retries @attempts = {} end
Public Instance Methods
execute(message, error)
click to toggle source
# File lib/batsir/strategies/retry_strategy.rb, line 14 def execute(message, error) @attempts[message] ? @attempts[message] += 1 : @attempts[message] = 0 if @attempts[message] >= @retries error_msg = "Tried to send '#{message}' #{@attempts[message]} times and failed" reset_attempts(message) log.error error_msg raise Batsir::Errors::RetryStrategyFailed.new error_msg else log.warn "Recovering from #{error}. Making another attempt (##{@attempts[message]+1})" result = @context.execute(message) reset_attempts(message) return result end end
reset_attempts(message)
click to toggle source
# File lib/batsir/strategies/retry_strategy.rb, line 30 def reset_attempts(message) @attempts.delete(message) end