mr_speedy_ruby 1.0.0.pre.alpha.3 → 1.0.0.pre.alpha.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 165397e3f490933a9629fab7f1ccdbbc46f8dfb930c377c71435a8d719de64e1
4
- data.tar.gz: fe00bea9f37148d44c08fcb6ec69b0c8b53db1e556afa828b89a542feca152d8
3
+ metadata.gz: 5d2c2406e33ada4b65dd88f1ab38466a18290dd9d83f0c29df982c419c660f48
4
+ data.tar.gz: 4d201453a1d10a717e4f338692f2c94fe6362ee1c94632d23377dcec6277616d
5
5
  SHA512:
6
- metadata.gz: 3c0e07138c3bfc72d5ed0692dd896c754e9e5c42455b345b9b6c546a180c32ed646962ae583d86c20109b3f758682efeda2436c5758dad7021d83a437cfdb90b
7
- data.tar.gz: 9013f4c7096f909db62dab0e812d682dc8a10f3bca1026cd50fcfdb912df815d0e60dc1b7824eb1e7a251aeb924daa4d6b1e857698149b2125e309c8f9f7b197
6
+ metadata.gz: 1ac74e3e6d1ea3def5a5154248c1ed121659c410baea0a8009d8f35aba30ac65e0f54cce422eaf2fcfd0219a1409eb2fd36ba83277980e6c2fabe7ee142198a7
7
+ data.tar.gz: cdcf8e9499ff5e501a76bcf7ce259d36edfeefd2e39029ff63872241df60948308022150b30730eb22ca6a6e38a9a552517cabade835bd7b930dda90fc44b285
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mr_speedy_ruby (1.0.0.pre.alpha.3)
4
+ mr_speedy_ruby (1.0.0.pre.alpha.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
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
- - [ ] Request Error Handling
163
+ - [x] Request Error Handling
164
164
 
165
165
  ## License
166
166
 
@@ -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
@@ -1,3 +1,3 @@
1
1
  module MrSpeedyRuby
2
- VERSION = "1.0.0-alpha.3"
2
+ VERSION = "1.0.0-alpha.4"
3
3
  end
@@ -1,7 +1,8 @@
1
1
  require "mr_speedy_ruby/version"
2
2
  require "mr_speedy_ruby/client"
3
+ require "mr_speedy_ruby/error"
4
+ require "mr_speedy_ruby/error_parser"
3
5
 
4
6
  # Mr Speedy Namespace Module
5
7
  module MrSpeedyRuby
6
- class Error < StandardError; end
7
8
  end
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.3
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-13 00:00:00.000000000 Z
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