Module: Zotero::NetworkErrors

Included in:
Client
Defined in:
lib/zotero/network_errors.rb

Overview

Handles network errors and translates them to appropriate Zotero exceptions

Constant Summary collapse

ERROR_MESSAGES =
{
  Errno::ECONNREFUSED => "Connection refused - server may be down",
  Errno::EHOSTUNREACH => "Host unreachable - check network connectivity",
  Errno::ENETUNREACH => "Host unreachable - check network connectivity",
  SocketError => "DNS resolution failed - check hostname",
  Net::OpenTimeout => "Connection timeout - server took too long to respond",
  Net::ReadTimeout => "Read timeout - server response was too slow",
  OpenSSL::SSL::SSLError => "SSL error - certificate verification failed",
  Timeout::Error => "Request timeout"
}.freeze

Instance Method Summary collapse

Instance Method Details

#error_message_for(error) ⇒ Object (private)



46
47
48
# File 'lib/zotero/network_errors.rb', line 46

def error_message_for(error)
  ERROR_MESSAGES.fetch(error.class) { "Network error: #{error.message}" }
end

#handle_network_errorsObject



20
21
22
23
24
# File 'lib/zotero/network_errors.rb', line 20

def handle_network_errors
  yield
rescue *network_error_classes => e
  raise translate_network_error(e)
end

#network_error_classesObject (private)



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/zotero/network_errors.rb', line 28

def network_error_classes
  [
    Errno::ECONNREFUSED,
    Errno::EHOSTUNREACH,
    Errno::ENETUNREACH,
    SocketError,
    Net::OpenTimeout,
    Net::ReadTimeout,
    OpenSSL::SSL::SSLError,
    Timeout::Error
  ]
end

#translate_network_error(error) ⇒ Object (private)



41
42
43
44
# File 'lib/zotero/network_errors.rb', line 41

def translate_network_error(error)
  message = error_message_for(error)
  Error.new("#{message} (#{error.class})")
end