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