easy_meli 0.6.1 → 0.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +17 -0
- data/lib/easy_meli.rb +1 -0
- data/lib/easy_meli/api_client.rb +12 -27
- data/lib/easy_meli/authorization_client.rb +3 -1
- data/lib/easy_meli/error_parser.rb +43 -0
- data/lib/easy_meli/errors.rb +56 -0
- data/lib/easy_meli/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67691d59c76a0324aa03dfc6e9f67c86954be2d93a49836ce33cb52bed270bed
|
4
|
+
data.tar.gz: 6f4740a8bbce9b8cc55aaccdd55b53e46bb19cd89b44f8fdaa2dfd0204d29274
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e37596a5954f789afc52ab92fe58c9b0bb0cfd32cdb6662b96305362081c56dba4a7f346a48989fa6da1487c5e84332c4382dcb9ab78278fa30f82b9c50541f0
|
7
|
+
data.tar.gz: 4d61945cbb1389ba00ae6c47829769c45244c3ffffb23147e75f34c245d2eee95aff60b150ef1e7e8929315fdea9b2c8b7ce97278b10d024c1ddef1d4f29cc8a
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## V 0.6.6
|
4
|
+
- Classify status code 401 as EasyMeli::InvalidTokenError.
|
5
|
+
|
6
|
+
## V 0.6.5
|
7
|
+
- Move Error class search to its own class and reuse it for ApiClient and AuthorizationClient
|
8
|
+
- Raise EasyMeli exceptions for server side errors.
|
9
|
+
|
10
|
+
## V 0.6.4
|
11
|
+
- Add Unknown error support
|
12
|
+
|
13
|
+
## V 0.6.3
|
14
|
+
- Fix error when the api response doesn't include error or message keys.
|
15
|
+
- Add right error message for forbidden error.
|
16
|
+
|
17
|
+
## V 0.6.2
|
18
|
+
- Update Error classification mechanism to use error message as first option
|
19
|
+
|
3
20
|
## V 0.6.1
|
4
21
|
- Fix a bug in the error raising in the authorization client introduced in V 0.6.0
|
5
22
|
|
data/lib/easy_meli.rb
CHANGED
data/lib/easy_meli/api_client.rb
CHANGED
@@ -5,17 +5,6 @@ class EasyMeli::ApiClient
|
|
5
5
|
|
6
6
|
API_ROOT_URL = 'https://api.mercadolibre.com'
|
7
7
|
|
8
|
-
ERROR_LIST = {
|
9
|
-
'invalid_grant' => EasyMeli::InvalidGrantError,
|
10
|
-
'forbidden' => EasyMeli::ForbiddenError,
|
11
|
-
'invalid_token' => EasyMeli::InvalidTokenError,
|
12
|
-
'Malformed access_token' => EasyMeli::MalformedTokenError
|
13
|
-
}
|
14
|
-
|
15
|
-
STATUS_ERRORS = {
|
16
|
-
429 => EasyMeli::TooManyRequestsError
|
17
|
-
}
|
18
|
-
|
19
8
|
base_uri API_ROOT_URL
|
20
9
|
headers EasyMeli::DEFAULT_HEADERS
|
21
10
|
format :json
|
@@ -51,30 +40,26 @@ class EasyMeli::ApiClient
|
|
51
40
|
|
52
41
|
self.class.send(verb, path, params.merge(query)).tap do |response|
|
53
42
|
logger&.log response
|
54
|
-
check_authentication(response)
|
55
43
|
check_status(response)
|
44
|
+
check_for_errors(response)
|
56
45
|
end
|
57
46
|
end
|
58
47
|
|
59
|
-
def
|
60
|
-
|
61
|
-
return if response_message.to_s.empty?
|
48
|
+
def check_status(response)
|
49
|
+
exception = EasyMeli::ErrorParser.status_error_class(response)
|
62
50
|
|
63
|
-
|
64
|
-
|
65
|
-
exception = ERROR_LIST[key]
|
66
|
-
raise exception.new(response)
|
67
|
-
end
|
51
|
+
if exception
|
52
|
+
raise exception.new(response)
|
68
53
|
end
|
69
54
|
end
|
70
55
|
|
71
|
-
def
|
72
|
-
return
|
73
|
-
body['error'].to_s.empty? ? body['message'] : body['error']
|
74
|
-
end
|
56
|
+
def check_for_errors(response)
|
57
|
+
return unless response.parsed_response.is_a?(Hash) && !response.body.nil?
|
75
58
|
|
76
|
-
|
77
|
-
|
78
|
-
|
59
|
+
exception = EasyMeli::ErrorParser.error_class(response)
|
60
|
+
|
61
|
+
if exception
|
62
|
+
raise exception.new(response)
|
63
|
+
end
|
79
64
|
end
|
80
65
|
end
|
@@ -54,7 +54,9 @@ class EasyMeli::AuthorizationClient
|
|
54
54
|
if response.success?
|
55
55
|
response.to_h[EasyMeli::AuthorizationClient::ACCESS_TOKEN_KEY]
|
56
56
|
else
|
57
|
-
|
57
|
+
exception = EasyMeli::ErrorParser.error_class(response) || EasyMeli::InvalidTokenError
|
58
|
+
|
59
|
+
raise exception.new(response)
|
58
60
|
end
|
59
61
|
end
|
60
62
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class EasyMeli::ErrorParser
|
2
|
+
ERROR_LIST = {
|
3
|
+
'Error validating grant' => EasyMeli::InvalidGrantError,
|
4
|
+
'The User ID must match the consultant\'s' => EasyMeli::ForbiddenError,
|
5
|
+
'invalid_token' => EasyMeli::InvalidTokenError,
|
6
|
+
'Malformed access_token' => EasyMeli::MalformedTokenError,
|
7
|
+
'too_many_requests' => EasyMeli::TooManyRequestsError,
|
8
|
+
'unknown_error' => EasyMeli::UnknownError
|
9
|
+
}
|
10
|
+
|
11
|
+
STATUS_ERRORS = {
|
12
|
+
401 => EasyMeli::InvalidTokenError,
|
13
|
+
500 => EasyMeli::InternalServerError,
|
14
|
+
501 => EasyMeli::NotImplementedError,
|
15
|
+
502 => EasyMeli::BadGatewayError,
|
16
|
+
503 => EasyMeli::ServiceUnavailableError,
|
17
|
+
504 => EasyMeli::GatewayTimeoutError
|
18
|
+
}
|
19
|
+
|
20
|
+
def self.error_class(response)
|
21
|
+
ERROR_LIST.find { |key, _| self.error_message_from_body(response)&.include?(key) }&.last
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.status_error_class(response)
|
25
|
+
return unless self.status_code_listed?(response) || self.server_side_error?(response)
|
26
|
+
|
27
|
+
STATUS_ERRORS[response.code] || EasyMeli::ServerError
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def self.error_message_from_body(response)
|
33
|
+
response['message'].to_s.empty? ? response['error'] : response['message']
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.server_side_error?(response)
|
37
|
+
response.code >= 500
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.status_code_listed?(response)
|
41
|
+
STATUS_ERRORS.keys.include?(response.code)
|
42
|
+
end
|
43
|
+
end
|
data/lib/easy_meli/errors.rb
CHANGED
@@ -65,4 +65,60 @@ module EasyMeli
|
|
65
65
|
'Too many requests'
|
66
66
|
end
|
67
67
|
end
|
68
|
+
|
69
|
+
class UnknownError < Error
|
70
|
+
private
|
71
|
+
|
72
|
+
def local_message
|
73
|
+
'Unknown Error'
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class ServerError < Error
|
78
|
+
private
|
79
|
+
|
80
|
+
def local_message
|
81
|
+
'Server Error'
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
class InternalServerError < ServerError
|
86
|
+
private
|
87
|
+
|
88
|
+
def local_message
|
89
|
+
'Internal Server Error'
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
class NotImplementedError < ServerError
|
94
|
+
private
|
95
|
+
|
96
|
+
def local_message
|
97
|
+
'Not Implemented'
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class BadGatewayError < ServerError
|
102
|
+
private
|
103
|
+
|
104
|
+
def local_message
|
105
|
+
'Bad Gateway'
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
class ServiceUnavailableError < ServerError
|
110
|
+
private
|
111
|
+
|
112
|
+
def local_message
|
113
|
+
'Service Unavailable'
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
class GatewayTimeoutError < ServerError
|
118
|
+
private
|
119
|
+
|
120
|
+
def local_message
|
121
|
+
'Gateway Timeout'
|
122
|
+
end
|
123
|
+
end
|
68
124
|
end
|
data/lib/easy_meli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easy_meli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Northam
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -130,6 +130,7 @@ files:
|
|
130
130
|
- lib/easy_meli/authorization_client.rb
|
131
131
|
- lib/easy_meli/configuration.rb
|
132
132
|
- lib/easy_meli/constants.rb
|
133
|
+
- lib/easy_meli/error_parser.rb
|
133
134
|
- lib/easy_meli/errors.rb
|
134
135
|
- lib/easy_meli/version.rb
|
135
136
|
homepage: https://github.com/easybroker/easy_meli
|