mr_speedy_ruby 1.0.0.pre.alpha.3 → 1.0.0.pre.alpha.4
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/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/lib/mr_speedy_ruby/base.rb +14 -0
- data/lib/mr_speedy_ruby/error.rb +212 -0
- data/lib/mr_speedy_ruby/error_parser.rb +60 -0
- data/lib/mr_speedy_ruby/version.rb +1 -1
- data/lib/mr_speedy_ruby.rb +2 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d2c2406e33ada4b65dd88f1ab38466a18290dd9d83f0c29df982c419c660f48
|
4
|
+
data.tar.gz: 4d201453a1d10a717e4f338692f2c94fe6362ee1c94632d23377dcec6277616d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ac74e3e6d1ea3def5a5154248c1ed121659c410baea0a8009d8f35aba30ac65e0f54cce422eaf2fcfd0219a1409eb2fd36ba83277980e6c2fabe7ee142198a7
|
7
|
+
data.tar.gz: cdcf8e9499ff5e501a76bcf7ce259d36edfeefd2e39029ff63872241df60948308022150b30730eb22ca6a6e38a9a552517cabade835bd7b930dda90fc44b285
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -160,7 +160,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
160
160
|
- [ ] Draft Delivery Deletion
|
161
161
|
- [ ] Draft Delivery List
|
162
162
|
- [ ] API Setting Update
|
163
|
-
- [
|
163
|
+
- [x] Request Error Handling
|
164
164
|
|
165
165
|
## License
|
166
166
|
|
data/lib/mr_speedy_ruby/base.rb
CHANGED
@@ -48,6 +48,8 @@ module MrSpeedyRuby
|
|
48
48
|
response = send_request("post", endpoint, token, payload)
|
49
49
|
|
50
50
|
response_body = JSON.parse(response.body)
|
51
|
+
validate_error(response: response_body)
|
52
|
+
|
51
53
|
response_body
|
52
54
|
end
|
53
55
|
|
@@ -62,6 +64,8 @@ module MrSpeedyRuby
|
|
62
64
|
response = send_request("get", endpoint, token, payload)
|
63
65
|
|
64
66
|
response_body = JSON.parse(response.body)
|
67
|
+
validate_error(response: response_body)
|
68
|
+
|
65
69
|
response_body
|
66
70
|
end
|
67
71
|
|
@@ -97,5 +101,15 @@ module MrSpeedyRuby
|
|
97
101
|
http.request(request)
|
98
102
|
end
|
99
103
|
end
|
104
|
+
|
105
|
+
# Error Validator
|
106
|
+
# @since 1.0.0-alpha.4
|
107
|
+
#
|
108
|
+
# @raise [Error] response error
|
109
|
+
def validate_error(response:)
|
110
|
+
success = response["is_successful"]
|
111
|
+
error = response["errors"]&.first || ""
|
112
|
+
MrSpeedyRuby::ErrorParser.raise_errors_from(code: error) unless success
|
113
|
+
end
|
100
114
|
end
|
101
115
|
end
|
@@ -0,0 +1,212 @@
|
|
1
|
+
module MrSpeedyRuby
|
2
|
+
# Base Error Class
|
3
|
+
# @since 1.0.0-alpha.4
|
4
|
+
#
|
5
|
+
# @raise [Error] base error
|
6
|
+
class Error < StandardError; end
|
7
|
+
|
8
|
+
# Error Module
|
9
|
+
# @since 1.0.0-alpha.4
|
10
|
+
# @see https://apitest.mrspeedy.ph/business-api/doc#common-errors
|
11
|
+
#
|
12
|
+
# @raise [MrSpeedyError] base mr.speedy error
|
13
|
+
class MrSpeedyError < Error
|
14
|
+
def initialize(msg = nil)
|
15
|
+
@message = msg
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# Mr.Speedy Unexpected Error Class
|
20
|
+
# @since 1.0.0-alpha.4
|
21
|
+
# @raise [Error] mr.speedy unexpected error
|
22
|
+
class UnexpectedError < MrSpeedyError
|
23
|
+
def to_s
|
24
|
+
@message || "Unexpected error. Please let us know at api@mrspeedy.ph."
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Mr.Speedy Invalid API Version Error Class
|
29
|
+
# @since 1.0.0-alpah.4
|
30
|
+
# @raise [Error] mr.speedy invalid api version error
|
31
|
+
class InvalidAPIVersion < MrSpeedyError
|
32
|
+
def to_s
|
33
|
+
@message || "Unknown API version."
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Mr.Speedy Required API Upgrade Error Class
|
38
|
+
# @since 1.0.0-alpha.4
|
39
|
+
# @raise [Error] mr.speedy required api upgrade error
|
40
|
+
class RequiredAPIUpgrade < MrSpeedyError
|
41
|
+
def to_s
|
42
|
+
message = "Requested API version was discontinued."\
|
43
|
+
" You should use the latest version instead."
|
44
|
+
@message || message
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Mr.Speedy Request Limit Exceeded Error Class
|
49
|
+
# @since 1.0.0-alpha.4
|
50
|
+
# @raise [Error] mr.speedy request limit exceeded error
|
51
|
+
class RequestLimitExceeded < MrSpeedyError
|
52
|
+
def to_s
|
53
|
+
@message || "You have reached an API usage limit."
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Mr.Speedy Required Auth Token Error Class
|
58
|
+
# @since 1.0.0-alpha.4
|
59
|
+
# @raise [Error] mr.speedy missing auth token error
|
60
|
+
class RequiredAuthToken < MrSpeedyError
|
61
|
+
def to_s
|
62
|
+
@message || "X-DV-Auth-Token header is missing from the request."
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Mr.Speedy Invalid Auth Token Error Class
|
67
|
+
# @since 1.0.0-alpha.4
|
68
|
+
# @raise [Error] mr.speedy invalid auth token error
|
69
|
+
class InvalidAuthToken < MrSpeedyError
|
70
|
+
def to_s
|
71
|
+
@message || "X-DV-Auth-Token you are sending is invalid."
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Mr.Speedy Required GET Method Error Class
|
76
|
+
# @since 1.0.0-alpha.4
|
77
|
+
# @raise [Error] mr.speedy invalid http method error
|
78
|
+
class RequiredMethodGET < MrSpeedyError
|
79
|
+
def to_s
|
80
|
+
@message || "HTTP method GET is required."
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Mr.Speedy Required POST Method Error Class
|
85
|
+
# @since 1.0.0-alpha.4
|
86
|
+
# @raise [Error] mr.speedy invalid http method error
|
87
|
+
class RequiredMethodPOST < MrSpeedyError
|
88
|
+
def to_s
|
89
|
+
@message || "HTTP method POST is required."
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Mr.Speedy Invalid POST Json Error Class
|
94
|
+
# @since 1.0.0-alpha.4
|
95
|
+
# @raise [Error] mr.speedy invalid post json error
|
96
|
+
class InvalidPOSTJson < MrSpeedyError
|
97
|
+
def to_s
|
98
|
+
@message || "POST request body must be in JSON format."
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# Mr.Speedy Invalid Parameters Error Class
|
103
|
+
# @since 1.0.0-alpha.4
|
104
|
+
# @raise [Error] mr.speedy invalid parameters error
|
105
|
+
class InvalidParameters < MrSpeedyError
|
106
|
+
def to_s
|
107
|
+
@message || "Request parameters contain errors"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# Mr.Speedy Unapproved Contract Error Class
|
112
|
+
# @since 1.0.0-alpha.4
|
113
|
+
# @raise [Error] mr.speedy unapproved contract error
|
114
|
+
class UnapprovedContract < MrSpeedyError
|
115
|
+
def to_s
|
116
|
+
@message || "Your agreement is not approved yet (for legal entities)."
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
# Mr.Speedy Service Unavailable Error Class
|
121
|
+
# @since 1.0.0-alpha.4
|
122
|
+
# @raise [Error] mr.speedy service unavailable error
|
123
|
+
class ServiceUnavailable < MrSpeedyError
|
124
|
+
def to_s
|
125
|
+
@message || "Our service is temporarily unavailable. Please try again later."
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
# Mr.Speedy Invalid API Method Error Class
|
130
|
+
# @since 1.0.0-alpha.4
|
131
|
+
# @raise [Error] mr.speedy invalid api method error
|
132
|
+
class InvalidAPIMethod < MrSpeedyError
|
133
|
+
def to_s
|
134
|
+
@message || "Unknown API method was requested."
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
# Mr.Speedy Buyout Not Allowed Error Class
|
139
|
+
# @since 1.0.0-alpha.4
|
140
|
+
# @raise [Error] mr.speedy buyout not allowed error
|
141
|
+
class BuyoutNotAllowed < MrSpeedyError
|
142
|
+
def to_s
|
143
|
+
@message || "You do not have access to buyout feature."
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
# Mr.Speedy Order Cannot Be Edited Error Class
|
148
|
+
# @since 1.0.0-alpha.4
|
149
|
+
# @raise [Error] mr.speedy order cannot be edited error
|
150
|
+
class OrderCannotBeEdited < MrSpeedyError
|
151
|
+
def to_s
|
152
|
+
@message || "Order cannot be edited."
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
# Mr.Speedy Order Cannot Be Canceled Error Class
|
157
|
+
# @since 1.0.0-alpha.4
|
158
|
+
# @raise [Error] mr.speedy order cannot be edited error
|
159
|
+
class OrderCannotBeCanceled < MrSpeedyError
|
160
|
+
def to_s
|
161
|
+
@message || "Order cannot be canceled."
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
# Mr.Speedy Insufficient Balance Error Class
|
166
|
+
# @since 1.0.0-alpha.4
|
167
|
+
# @raise [Error] mr.speedy insufficient balance error
|
168
|
+
class InsufficientBalance < MrSpeedyError
|
169
|
+
def to_s
|
170
|
+
@message || "Your balance is too low (for legal entities)."
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
# Mr.Speedy Buyout Amount Limit Exceeded Error Class
|
175
|
+
# @since 1.0.0-alpha.4
|
176
|
+
# @raise [Error] mr.speedy buyout amount limit exceeded error
|
177
|
+
class BuyoutAmountLimitExceeded < MrSpeedyError
|
178
|
+
def to_s
|
179
|
+
message = "Total buyout amount in your active orders is too large. "\
|
180
|
+
"You do not have sufficient balance / credit limit to place"\
|
181
|
+
" the new order."
|
182
|
+
@message || message
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
# Mr.Speedy Route Not Found Error Class
|
187
|
+
# @since 1.0.0-alpha.4
|
188
|
+
# @raise [Error] mr.speedy route not found error
|
189
|
+
class RouteNotFound < MrSpeedyError
|
190
|
+
def to_s
|
191
|
+
@message || "Route not found."
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
# Mr.Speedy Total Payment Amount Limit Exceeded Error Class
|
196
|
+
# @since 1.0.0-alpha.4
|
197
|
+
# @raise [Error] mr.speedy total payment amount limit exceeded error
|
198
|
+
class TotalPaymentAmountLimitExceeded < MrSpeedyError
|
199
|
+
def to_s
|
200
|
+
@message || "Exceeded maximum order price."
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
# Mr.Speedy Duplicate Order Error Class
|
205
|
+
# @since 1.0.0-alpha.4
|
206
|
+
# @raise [Error] mr.speedy duplicate order error
|
207
|
+
class OrderIsDuplicate < MrSpeedyError
|
208
|
+
def to_s
|
209
|
+
@message || "Duplicate order rejected"
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module MrSpeedyRuby
|
2
|
+
# Error Parser Class
|
3
|
+
# @since 1.0.0-alpha.4
|
4
|
+
class ErrorParser
|
5
|
+
# Mr.Speedy Error Codes
|
6
|
+
# @since 1.0.0-alpha.4
|
7
|
+
#
|
8
|
+
# @see https://apitest.mrspeedy.ph/business-api/doc#common-errors
|
9
|
+
ERROR_CODES = {
|
10
|
+
"unexpected_error" => UnexpectedError,
|
11
|
+
"invalid_api_version" => InvalidAPIVersion,
|
12
|
+
"required_api_upgrade" => RequiredAPIUpgrade,
|
13
|
+
"request_limit_exceeded" => RequestLimitExceeded,
|
14
|
+
"required_auth_token" => RequiredAuthToken,
|
15
|
+
"invalid_auth_token" => InvalidAuthToken,
|
16
|
+
"required_method_get" => RequiredMethodGET,
|
17
|
+
"required_method_post" => RequiredMethodPOST,
|
18
|
+
"invalid_post_json" => InvalidPOSTJson,
|
19
|
+
"invalid_parameters" => InvalidParameters,
|
20
|
+
"unapproved_contract" => UnapprovedContract,
|
21
|
+
"service_unavailable" => ServiceUnavailable,
|
22
|
+
"invalid_api_method" => InvalidAPIMethod,
|
23
|
+
"buyout_not_allowed" => BuyoutNotAllowed,
|
24
|
+
"order_cannot_be_edited" => OrderCannotBeEdited,
|
25
|
+
"order_cannot_be_canceled" => OrderCannotBeCanceled,
|
26
|
+
"insufficient_balance" => InsufficientBalance,
|
27
|
+
"buyout_amount_limit_exceeded" => BuyoutAmountLimitExceeded,
|
28
|
+
"route_not_found" => RouteNotFound,
|
29
|
+
"total_payment_amount_limit_exceeded" => TotalPaymentAmountLimitExceeded,
|
30
|
+
"order_is_duplicate" => OrderIsDuplicate,
|
31
|
+
}.freeze
|
32
|
+
|
33
|
+
class << self
|
34
|
+
# Raise Error from Response Status
|
35
|
+
# @param code [String] error code
|
36
|
+
def raise_errors_from(code:)
|
37
|
+
raise_error_for(code)
|
38
|
+
|
39
|
+
# Default to Unexpected Error
|
40
|
+
raise UnexpectedError
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
# Raise Error from Response Status
|
46
|
+
# @param code [String] error code
|
47
|
+
#
|
48
|
+
# @private
|
49
|
+
#
|
50
|
+
# @raise [MrSpeedyRuby::MrSpeedyError] raise code based error
|
51
|
+
def raise_error_for(code)
|
52
|
+
error = ERROR_CODES[code]
|
53
|
+
|
54
|
+
# Constantize string class
|
55
|
+
# @see https://stackoverflow.com/a/5924541
|
56
|
+
raise Object.const_get("MrSpeedyRuby::#{error}") if error
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/mr_speedy_ruby.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mr_speedy_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.pre.alpha.
|
4
|
+
version: 1.0.0.pre.alpha.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter John Alvarado
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -136,6 +136,8 @@ files:
|
|
136
136
|
- lib/mr_speedy_ruby.rb
|
137
137
|
- lib/mr_speedy_ruby/base.rb
|
138
138
|
- lib/mr_speedy_ruby/client.rb
|
139
|
+
- lib/mr_speedy_ruby/error.rb
|
140
|
+
- lib/mr_speedy_ruby/error_parser.rb
|
139
141
|
- lib/mr_speedy_ruby/lib/hash_refinement.rb
|
140
142
|
- lib/mr_speedy_ruby/order.rb
|
141
143
|
- lib/mr_speedy_ruby/version.rb
|