files.com 1.0.487 → 1.0.488
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/_VERSION +1 -1
- data/lib/files.com/api_client.rb +12 -5
- data/lib/files.com/version.rb +1 -1
- data/spec/lib/api_client_spec.rb +47 -5
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1be0c3961f1c2d64351b352e054d27ca5e0224457c7328d3082bca7c233707d7
|
4
|
+
data.tar.gz: ddda72daeb4660814c6b663b0f716425fd3168173b92178e60cad9aef78ffbd7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f8542508603e1b873829c75d3fbefca19d4d226d0fdcba9aac3d73e3348e8bbd8f1e91edd17d6c4421be6715b798a95f30154a63d19bbc91849faa1dc9dafc2
|
7
|
+
data.tar.gz: 150a8b8acfeaf6233b253abf97026da469a2a9f5ce245608c48daa2dfae582bd60844fd3ed3d4d09515f240af742e869d313c48b7c68ceb100bd1e3fd767e59d
|
data/_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.488
|
data/lib/files.com/api_client.rb
CHANGED
@@ -236,12 +236,11 @@ module Files
|
|
236
236
|
|
237
237
|
case e
|
238
238
|
when Faraday::ClientError, Faraday::ServerError
|
239
|
-
if e.response
|
239
|
+
if e.response and has_error_type?(e)
|
240
240
|
handle_error_response(e.response, error_context)
|
241
241
|
else
|
242
242
|
handle_network_error(e, error_context, num_retries, base_url)
|
243
243
|
end
|
244
|
-
|
245
244
|
else
|
246
245
|
raise
|
247
246
|
end
|
@@ -302,13 +301,15 @@ module Files
|
|
302
301
|
end
|
303
302
|
end
|
304
303
|
|
305
|
-
private def handle_network_error(error,
|
304
|
+
private def handle_network_error(error, _context, num_retries, base_url = nil)
|
306
305
|
base_url ||= Files.base_url
|
307
306
|
|
308
|
-
|
307
|
+
error_message = error.message.empty? ? error.response[:body] : error.message
|
308
|
+
|
309
|
+
Util.log_error("Network error", error_message: error_message)
|
309
310
|
message = "Could not connect to Files.com at URL #{base_url}. Please check your internet connection and try again. If this problem persists, you should check Files.com's service status at https://status.files.com, or contact your primary account representative."
|
310
311
|
message += " Request was retried #{num_retries} times." if num_retries > 0
|
311
|
-
message += "\n\n(Network error: #{
|
312
|
+
message += "\n\n(Network error: #{error_message})"
|
312
313
|
|
313
314
|
raise APIConnectionError, message
|
314
315
|
end
|
@@ -337,6 +338,12 @@ module Files
|
|
337
338
|
headers
|
338
339
|
end
|
339
340
|
|
341
|
+
private def has_error_type?(e)
|
342
|
+
Response.from_faraday_hash(e.response).data&.dig(:type) ? true : false
|
343
|
+
rescue JSON::ParserError, Error
|
344
|
+
false
|
345
|
+
end
|
346
|
+
|
340
347
|
private def log_request(context, num_retries, no_body: false)
|
341
348
|
Util.log_info("Request", method: context.method, num_retries: num_retries, path: context.path)
|
342
349
|
Util.log_debug("Request details", body: context.body, query_params: context.query_params) unless no_body
|
data/lib/files.com/version.rb
CHANGED
data/spec/lib/api_client_spec.rb
CHANGED
@@ -11,20 +11,20 @@ RSpec.describe Files::ApiClient do
|
|
11
11
|
allow(subject).to receive(:log_request).and_raise(Faraday::ServerError.new('', mock_response))
|
12
12
|
end
|
13
13
|
|
14
|
-
it 'retries with sleeps and raises general api error' do
|
14
|
+
it 'retries with sleeps and raises general api connection error' do
|
15
15
|
expect(subject).to receive(:sleep).with(0.5).ordered
|
16
16
|
expect(subject).to receive(:sleep).with(be_between(0.5, 1)).ordered
|
17
17
|
expect(subject).to receive(:sleep).with(be_between(1, 2)).ordered
|
18
18
|
expect {
|
19
19
|
subject.execute_request_with_rescues(1, context) { 'empty block' }
|
20
|
-
}.to raise_error(Files::
|
20
|
+
}.to raise_error(Files::APIConnectionError, error_message)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
context 'when response is a valid json' do
|
25
25
|
it_behaves_like 'a server error handler' do
|
26
|
-
let(:error_message) { "Server Error" }
|
27
|
-
let(:mock_response) { { status: 502, headers: {}, body: { error:
|
26
|
+
let(:error_message) { "Could not connect to Files.com at URL 1. Please check your internet connection and try again. If this problem persists, you should check Files.com's service status at https://status.files.com, or contact your primary account representative. Request was retried 3 times.\n\n(Network error: {\"error\":\"Server Error\"})" }
|
27
|
+
let(:mock_response) { { status: 502, headers: {}, body: { error: "Server Error" }.to_json } }
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
@@ -37,8 +37,50 @@ RSpec.describe Files::ApiClient do
|
|
37
37
|
body: "<html><head><title>502 Bad Gateway</title></head><body><center><h1>502 Bad Gateway</h1></center><hr><center>files.com</center></body></html>"
|
38
38
|
}
|
39
39
|
}
|
40
|
-
let(:error_message) { "
|
40
|
+
let(:error_message) { "Could not connect to Files.com at URL 1. Please check your internet connection and try again. If this problem persists, you should check Files.com's service status at https://status.files.com, or contact your primary account representative. Request was retried 3 times.\n\n(Network error: <html><head><title>502 Bad Gateway</title></head><body><center><h1>502 Bad Gateway</h1></center><hr><center>files.com</center></body></html>)" }
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
44
|
+
|
45
|
+
describe "#specific_api_error" do
|
46
|
+
let(:context) { double('context', method: 'some method', path: 'some path') }
|
47
|
+
let(:bad_request_with_data) {
|
48
|
+
{
|
49
|
+
error: "The request parameter path cannot have trailing whitespace: . /+testing previews.",
|
50
|
+
'http-code': 400,
|
51
|
+
instance: "23825f04-7add-4911-b9d7-f4342a75a471",
|
52
|
+
title: "Request Param Path Cannot Have Trailing Whitespace",
|
53
|
+
type: "bad-request/request-param-path-cannot-have-trailing-whitespace"
|
54
|
+
}
|
55
|
+
}
|
56
|
+
let(:bad_request_without_data) {
|
57
|
+
{
|
58
|
+
error: 'Bad Request'
|
59
|
+
}
|
60
|
+
}
|
61
|
+
let(:mock_good_response) { { status: 400, headers: {}, body: bad_request_with_data.to_json } }
|
62
|
+
let(:mock_response_without_type) { { status: 400, headers: {}, body: bad_request_without_data.to_json } }
|
63
|
+
let(:mock_empty_response) { { status: 400, headers: {}, body: '' } }
|
64
|
+
|
65
|
+
it "handles correctly when bad request with data and proper error type" do
|
66
|
+
allow(subject).to receive(:log_request).and_raise(Faraday::BadRequestError.new('', mock_good_response))
|
67
|
+
expect {
|
68
|
+
subject.execute_request_with_rescues(1, context) { 'empty block' }
|
69
|
+
}.to raise_error(Files::RequestParamPathCannotHaveTrailingWhitespaceError, bad_request_with_data[:error])
|
70
|
+
end
|
71
|
+
|
72
|
+
it "throws generic bad request error when no type" do
|
73
|
+
allow(subject).to receive(:log_request).and_raise(Faraday::BadRequestError.new('', mock_response_without_type))
|
74
|
+
expect {
|
75
|
+
subject.execute_request_with_rescues(1, context) { 'empty block' }
|
76
|
+
}.to raise_error(Files::APIConnectionError)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "throws generic bad request error when no body at all" do
|
80
|
+
allow(subject).to receive(:log_request).and_raise(Faraday::BadRequestError.new('', mock_empty_response))
|
81
|
+
expect {
|
82
|
+
subject.execute_request_with_rescues(1, context) { 'empty block' }
|
83
|
+
}.to raise_error(Files::APIConnectionError)
|
84
|
+
end
|
85
|
+
end
|
44
86
|
end
|