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 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