artirix_data_models 0.8.3 → 0.9.0
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/README.md +17 -0
- data/lib/artirix_data_models/gateways/data_gateway.rb +110 -16
- data/lib/artirix_data_models/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 713d558fd789e3af896c2621897a347ec1493f34
|
4
|
+
data.tar.gz: 95f5c0b37d134fb771f28442000849a9b605011c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 549184151747d15673c69d9798adce02d61f8afe80d850c34f33d4f14755105a0b51ce7f03bfd771c8ea3b9ea14ea4c4dd8f9022f42b18051711d90f1d02331a
|
7
|
+
data.tar.gz: eb5c9f12149a61af0db1218ca221da1a8816be668194e429511b4210abd4e1446967476f95534010870b477a6e176f8b1d7608502fc601ebea7d30b40c238e03
|
data/README.md
CHANGED
@@ -250,6 +250,23 @@ end
|
|
250
250
|
|
251
251
|
## Changes
|
252
252
|
|
253
|
+
### 0.9.0
|
254
|
+
|
255
|
+
- Fake Responses now can be a callable object (if it responds to `call` it will invoke it)
|
256
|
+
- refactor in `ArtirixDataModels::DataGateway` to add more info into the exceptions
|
257
|
+
- `ArtirixDataModels::DataGateway::Error` and subclasses have now `path`, `method`, `response_status`, `response_body` (when applicable) and also `json_response_body` method which will try to parse `response_body` as if it were json (nil if it is not present or if it is not a valid json)
|
258
|
+
- `ArtirixDataModels::DataGateway::Error` subclasses now for specific response status:
|
259
|
+
-- `NotFound`
|
260
|
+
-- `NotAcceptable`
|
261
|
+
-- `UnprocessableEntity`
|
262
|
+
-- `Unauthorized`
|
263
|
+
-- `Forbidden`
|
264
|
+
-- `RequestTimeout`
|
265
|
+
-- `TooManyRequests`
|
266
|
+
-- `ServerError`
|
267
|
+
|
268
|
+
note: `ParseError` will not have the `response_status`
|
269
|
+
|
253
270
|
### 0.8.3
|
254
271
|
|
255
272
|
- `DataGateway` refactor, plus adding `put` and `delete` support.
|
@@ -24,13 +24,17 @@ class ArtirixDataModels::DataGateway
|
|
24
24
|
|
25
25
|
def call(method, path, json_body: true, response_adaptor: nil, body: nil, fake: false, fake_response: nil, cache_adaptor: nil, **_ignored_options)
|
26
26
|
if fake
|
27
|
-
|
27
|
+
result = fake_response.respond_to?(:call) ? fake_response.call : fake_response
|
28
28
|
elsif cache_adaptor.present?
|
29
|
-
|
29
|
+
result = cache_adaptor.call { perform(method, path, body, json_body) }
|
30
30
|
else
|
31
|
-
|
31
|
+
result = perform(method, path, body, json_body)
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
|
+
parse_response result: result,
|
35
|
+
response_adaptor: response_adaptor,
|
36
|
+
method: method,
|
37
|
+
path: path
|
34
38
|
end
|
35
39
|
|
36
40
|
private
|
@@ -70,17 +74,14 @@ class ArtirixDataModels::DataGateway
|
|
70
74
|
end
|
71
75
|
end
|
72
76
|
rescue Faraday::ConnectionFailed => e
|
73
|
-
raise ConnectionError, "method: #{method}, path: #{path}, error: #{e}"
|
77
|
+
raise ConnectionError.new(path: path, method: method), "method: #{method}, path: #{path}, error: #{e}"
|
74
78
|
end
|
75
79
|
|
76
80
|
def treat_response(response, method, path)
|
77
|
-
if response.success?
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
else
|
82
|
-
raise GatewayError, "method: #{method}, path: #{path}, status: #{response.status}, body: #{response.body}"
|
83
|
-
end
|
81
|
+
return response.body if response.success?
|
82
|
+
|
83
|
+
klass = exception_for_status(response.status)
|
84
|
+
raise klass.new(path: path, method: method, response_body: response.body, response_status: response.status)
|
84
85
|
end
|
85
86
|
|
86
87
|
def body_to_json(body)
|
@@ -92,7 +93,7 @@ class ArtirixDataModels::DataGateway
|
|
92
93
|
end
|
93
94
|
end
|
94
95
|
|
95
|
-
def parse_response(result
|
96
|
+
def parse_response(result:, response_adaptor:, path:, method:)
|
96
97
|
if result.present?
|
97
98
|
parsed_response = Oj.load result, symbol_keys: true
|
98
99
|
else
|
@@ -106,7 +107,30 @@ class ArtirixDataModels::DataGateway
|
|
106
107
|
end
|
107
108
|
|
108
109
|
rescue Oj::ParseError => e
|
109
|
-
raise ParseError,
|
110
|
+
raise ParseError.new(path: path, method: method, response_body: result), e.message
|
111
|
+
end
|
112
|
+
|
113
|
+
def exception_for_status(response_status)
|
114
|
+
case response_status.to_i
|
115
|
+
when 404
|
116
|
+
NotFound
|
117
|
+
when 406
|
118
|
+
NotAcceptable
|
119
|
+
when 422
|
120
|
+
UnprocessableEntity
|
121
|
+
when 401
|
122
|
+
Unauthorized
|
123
|
+
when 403
|
124
|
+
Forbidden
|
125
|
+
when 408
|
126
|
+
RequestTimeout
|
127
|
+
when 429
|
128
|
+
TooManyRequests
|
129
|
+
when 500
|
130
|
+
ServerError
|
131
|
+
else
|
132
|
+
GatewayError
|
133
|
+
end
|
110
134
|
end
|
111
135
|
|
112
136
|
module DefaultConnectionLoader
|
@@ -143,9 +167,38 @@ class ArtirixDataModels::DataGateway
|
|
143
167
|
end
|
144
168
|
|
145
169
|
class Error < StandardError
|
146
|
-
|
170
|
+
attr_reader :path, :method, :response_status, :response_body
|
147
171
|
|
148
|
-
|
172
|
+
def initialize(path: nil, method: nil, response_status: nil, response_body: nil)
|
173
|
+
@path = path
|
174
|
+
@method = method
|
175
|
+
@response_status = response_status
|
176
|
+
@response_body = response_body
|
177
|
+
end
|
178
|
+
|
179
|
+
def json_response_body
|
180
|
+
return nil unless response_body.present?
|
181
|
+
|
182
|
+
Oj.load response_body, symbol_keys: true
|
183
|
+
|
184
|
+
rescue Oj::Error # in case it's not json
|
185
|
+
nil
|
186
|
+
end
|
187
|
+
|
188
|
+
def to_s
|
189
|
+
msg = super
|
190
|
+
msg = nil if msg == self.class.to_s
|
191
|
+
|
192
|
+
parts = {
|
193
|
+
path: path,
|
194
|
+
method: method,
|
195
|
+
response_status: response_status,
|
196
|
+
response_body: response_body,
|
197
|
+
message: msg,
|
198
|
+
}.select { |_, v| v.present? }.map { |k, v| "#{k}: #{v.inspect}" }
|
199
|
+
|
200
|
+
"#{self.class}: #{parts.join ', '}"
|
201
|
+
end
|
149
202
|
end
|
150
203
|
|
151
204
|
class ParseError < Error
|
@@ -154,6 +207,47 @@ class ArtirixDataModels::DataGateway
|
|
154
207
|
class GatewayError < Error
|
155
208
|
end
|
156
209
|
|
210
|
+
###########################################
|
211
|
+
# SPECIAL, not subclasses of GatewayError #
|
212
|
+
###########################################
|
213
|
+
|
214
|
+
# 404
|
215
|
+
class NotFound < Error
|
216
|
+
end
|
217
|
+
|
218
|
+
# 406
|
219
|
+
class NotAcceptable < Error
|
220
|
+
end
|
221
|
+
|
222
|
+
# 422
|
223
|
+
class UnprocessableEntity < Error
|
224
|
+
end
|
225
|
+
|
226
|
+
##############################
|
227
|
+
# subclasses of GatewayError #
|
228
|
+
##############################
|
229
|
+
|
230
|
+
# 401
|
231
|
+
class Unauthorized < GatewayError
|
232
|
+
end
|
233
|
+
|
234
|
+
# 403
|
235
|
+
class Forbidden < GatewayError
|
236
|
+
end
|
237
|
+
|
238
|
+
# 408
|
239
|
+
class RequestTimeout < GatewayError
|
240
|
+
end
|
241
|
+
|
242
|
+
# 429
|
243
|
+
class TooManyRequests < GatewayError
|
244
|
+
end
|
245
|
+
|
246
|
+
# 500
|
247
|
+
class ServerError < GatewayError
|
248
|
+
end
|
249
|
+
|
250
|
+
# generic error
|
157
251
|
class ConnectionError < GatewayError
|
158
252
|
end
|
159
253
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: artirix_data_models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eduardo Turiño
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|