Sha256: 4eb65a40a2a66311029e12f6723974543f8e7a1de19b2b00d601c1d891fd2c65

Contents?: true

Size: 1019 Bytes

Versions: 5

Compression:

Stored size: 1019 Bytes

Contents

module Massive
  module Retry
    extend ActiveSupport::Concern

    included do
      retry_interval 2
      maximum_retries 10

      def self.inherited(base)
        super

        base.retry_interval retry_interval
        base.maximum_retries maximum_retries
      end
    end

    def retrying(&block)
      self.retries = 0

      begin
        block.call
      rescue Massive::Cancelled, SignalException
        # re-raise cancelled and signal exceptions since they are not an actual error
        raise
      rescue StandardError => e
        self.retries += 1

        if self.retries < self.class.maximum_retries
          Kernel.sleep self.class.retry_interval
          retry
        else
          raise e
        end
      end
    end

    module ClassMethods
      def retry_interval(value=nil)
        @retry_interval = value if value
        @retry_interval
      end

      def maximum_retries(value=nil)
        @maximum_retries = value if value
        @maximum_retries
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
massive-0.4.0 lib/massive/retry.rb
massive-0.3.0 lib/massive/retry.rb
massive-0.2.0 lib/massive/retry.rb
massive-0.1.1 lib/massive/retry.rb
massive-0.1.0 lib/massive/retry.rb