Module: ActiveMerchant::NetworkConnectionRetries
- Included in:
- Connection
- Defined in:
- lib/active_merchant/network_connection_retries.rb
Constant Summary collapse
- DEFAULT_RETRIES =
3
- DEFAULT_CONNECTION_ERRORS =
{ EOFError => "The remote server dropped the connection", Errno::ECONNRESET => "The remote server reset the connection", Timeout::Error => "The connection to the remote server timed out", Errno::ETIMEDOUT => "The connection to the remote server timed out", SocketError => "The connection to the remote server could not be established", Errno::EHOSTUNREACH => "The connection to the remote server could not be established", OpenSSL::SSL::SSLError => "The SSL connection to the remote server could not be established" }
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.included(base) ⇒ Object
14 15 16 |
# File 'lib/active_merchant/network_connection_retries.rb', line 14 def self.included(base) base.send(:attr_accessor, :retry_safe) end |
Instance Method Details
#retry_exceptions(options = {}) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/active_merchant/network_connection_retries.rb', line 18 def retry_exceptions(={}) connection_errors = DEFAULT_CONNECTION_ERRORS.merge([:connection_exceptions] || {}) retry_network_exceptions() do begin yield rescue Errno::ECONNREFUSED => e raise ActiveMerchant::RetriableConnectionError.new("The remote server refused the connection", e) rescue OpenSSL::X509::CertificateError => e NetworkConnectionRetries.log([:logger], :error, e., [:tag]) raise ActiveMerchant::ClientCertificateError, "The remote server did not accept the provided SSL certificate" rescue Zlib::BufError => e raise ActiveMerchant::InvalidResponseError, "The remote server replied with an invalid response" rescue *connection_errors.keys => e raise ActiveMerchant::ConnectionError.new((connection_errors, e.class), e) end end end |