Sha256: 69b8a252abb22f3874d2a332b21f23662406c9ef4be965063a6c2059a55d823d

Contents?: true

Size: 1.22 KB

Versions: 3

Compression:

Stored size: 1.22 KB

Contents

module Shutl
  class << self
    def notifier_klass= klass
      NetworkRetry.notifier_klass = klass
    end

    def notifier_klass
      NetworkRetry.notifier_klass
    end

    delegate :notify, to: :notifier_klass
  end

  module NetworkRetry
    def retry message= "Notice: Network Exception", default=nil
      Retriable.retriable(retry_settings) { yield }
    rescue *network_exceptions => e
      notifier_klass.notify(e, error_message: message)
      default
    end

    attr_writer :notifier_klass

    def notifier_klass
      @notifier_klass ||= Airbrake
    end

    private

    def network_exceptions
      [
        Timeout::Error,
        Errno::ECONNREFUSED,
        EOFError,
        Net::HTTPBadResponse,
        Errno::ETIMEDOUT,
        Faraday::TimeoutError,
        Faraday::ConnectionFailed,
        Faraday::ParsingError,
        Faraday::SSLError
      ]
    end

    def retry_settings options = {}
      interval = options[:sleep] || (test_mode ? 0 : 1)
      {on: network_exceptions, tries: 3, interval: interval}.merge options
    end

    #override based on environment
    def test_mode
      false
    end

    class << self
      delegate :retry_connection, to: NetworkRetry
    end

    extend self
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
shutl_auth-0.9.3 lib/shutl/network_retry.rb
shutl_auth-0.9.2 lib/shutl/network_retry.rb
shutl_auth-0.9.1 lib/shutl/network_retry.rb