-
Notifications
You must be signed in to change notification settings - Fork 86
Expand file tree
/
Copy pathexceptions.rb
More file actions
60 lines (53 loc) · 1.54 KB
/
exceptions.rb
File metadata and controls
60 lines (53 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# frozen_string_literal: true
module Net
# Net::HTTP exception class.
# You cannot use Net::HTTPExceptions directly; instead, you must use
# its subclasses.
module HTTPExceptions
# Valid keys for pattern matching via #deconstruct_keys.
PATTERN_MATCHING_KEYS = %i[message response].freeze
def initialize(msg, res) #:nodoc:
super msg
@response = res
end
attr_reader :response
alias data response #:nodoc: obsolete
# Returns a hash of exception attributes for pattern matching.
#
# Valid keys are: +:message+, +:response+
#
# Example:
#
# begin
# http.request(req)
# rescue => e
# case e
# in HTTPRetriableError[response: { code: '503' }]
# retry_with_backoff
# in HTTPClientException[response: { code: '404' }]
# handle_not_found
# end
# end
#
def deconstruct_keys(keys)
valid_keys = keys ? PATTERN_MATCHING_KEYS & keys : PATTERN_MATCHING_KEYS
valid_keys.to_h { |key| [key, public_send(key)] }
end
end
# :stopdoc:
class HTTPError < ProtocolError
include HTTPExceptions
end
class HTTPRetriableError < ProtoRetriableError
include HTTPExceptions
end
class HTTPClientException < ProtoServerError
include HTTPExceptions
end
class HTTPFatalError < ProtoFatalError
include HTTPExceptions
end
# We cannot use the name "HTTPServerError", it is the name of the response.
HTTPServerException = HTTPClientException # :nodoc:
deprecate_constant(:HTTPServerException)
end