restful_resource 2.5.3 → 2.6.1
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/.circleci/config.yml +10 -1
- data/.gitignore +0 -1
- data/CHANGELOG.md +22 -0
- data/Gemfile.lock +113 -0
- data/lib/restful_resource/base.rb +1 -1
- data/lib/restful_resource/http_client.rb +9 -2
- data/lib/restful_resource/version.rb +1 -1
- data/restful_resource.gemspec +1 -1
- data/spec/restful_resource/base_authorization_spec.rb +2 -6
- data/spec/restful_resource/base_spec.rb +12 -4
- data/spec/restful_resource/http_client_spec.rb +48 -2
- data/spec/restful_resource/rails_validations_spec.rb +2 -2
- data/spec/restful_resource/redirections_spec.rb +2 -2
- metadata +7 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 015747ee95ac4e52617a009da36dcccb671aa6f8437662287f9dadf951f2049e
|
|
4
|
+
data.tar.gz: c27835d8a584d1d5c228725892ceca06cb215cbdee088d7c2b6884228371aab1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9d987975b117009d80e0179663ab643a24d055220b01f149be44d12024968732166ec9a589d9517f27150630a8794b0e2557b8fe72ff332be8a3472dab74deb6
|
|
7
|
+
data.tar.gz: 1cebc647b6ddfca2d0fee0ab9bb9d32ef1820f3d06d613a7417b38f9c28617569bfcfe3f6dac7fe71eff47c8c8b7041876cbc54a90fb6d78438e39ae720cac13
|
data/.circleci/config.yml
CHANGED
|
@@ -7,7 +7,9 @@ jobs:
|
|
|
7
7
|
- checkout
|
|
8
8
|
- run:
|
|
9
9
|
name: Bundle Install
|
|
10
|
-
command:
|
|
10
|
+
command: |
|
|
11
|
+
gem install bundler && \
|
|
12
|
+
bundle check || bundle install
|
|
11
13
|
- run:
|
|
12
14
|
name: Run rspec in parallel
|
|
13
15
|
command: |
|
|
@@ -18,3 +20,10 @@ jobs:
|
|
|
18
20
|
$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
|
|
19
21
|
- store_test_results:
|
|
20
22
|
path: test_results
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
workflows:
|
|
26
|
+
version: 2
|
|
27
|
+
build:
|
|
28
|
+
jobs:
|
|
29
|
+
- build
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
2.6.1
|
|
4
|
+
---
|
|
5
|
+
- Support only `faraday-0.15.x`
|
|
6
|
+
- `0.16.x` breaks `faraday-http-cache`
|
|
7
|
+
|
|
8
|
+
2.6.0 (yanked)
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
- Upgrade to `faraday-0.16.x`
|
|
12
|
+
- Add `X-Client-Timeout` header on requests if a client timeout is set
|
|
13
|
+
|
|
14
|
+
2.5.3
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
- Raise `RestfulResource::HttpClient::GatewayTimeout` when response status is `504`
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
2.5.2
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
- Add ability to set `timeout` and `open_timeout` options on connection
|
|
24
|
+
|
|
3
25
|
2.5.1
|
|
4
26
|
---
|
|
5
27
|
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
restful_resource (2.6.1)
|
|
5
|
+
activesupport
|
|
6
|
+
faraday (~> 0.15.0)
|
|
7
|
+
faraday-cdn-metrics
|
|
8
|
+
faraday-encoding
|
|
9
|
+
faraday-http-cache
|
|
10
|
+
faraday_middleware
|
|
11
|
+
link_header
|
|
12
|
+
rack
|
|
13
|
+
typhoeus
|
|
14
|
+
|
|
15
|
+
GEM
|
|
16
|
+
remote: https://rubygems.org/
|
|
17
|
+
specs:
|
|
18
|
+
activesupport (6.0.0)
|
|
19
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
20
|
+
i18n (>= 0.7, < 2)
|
|
21
|
+
minitest (~> 5.1)
|
|
22
|
+
tzinfo (~> 1.1)
|
|
23
|
+
zeitwerk (~> 2.1, >= 2.1.8)
|
|
24
|
+
ast (2.4.0)
|
|
25
|
+
carwow_rubocop (3.0.3)
|
|
26
|
+
rubocop (>= 0.68)
|
|
27
|
+
rubocop-performance
|
|
28
|
+
rubocop-rspec
|
|
29
|
+
coderay (1.1.2)
|
|
30
|
+
concurrent-ruby (1.1.5)
|
|
31
|
+
diff-lcs (1.3)
|
|
32
|
+
ethon (0.12.0)
|
|
33
|
+
ffi (>= 1.3.0)
|
|
34
|
+
faraday (0.15.4)
|
|
35
|
+
multipart-post (>= 1.2, < 3)
|
|
36
|
+
faraday-cdn-metrics (0.1.0)
|
|
37
|
+
faraday (~> 0.11)
|
|
38
|
+
faraday-encoding (0.0.5)
|
|
39
|
+
faraday
|
|
40
|
+
faraday-http-cache (2.0.0)
|
|
41
|
+
faraday (~> 0.8)
|
|
42
|
+
faraday_middleware (0.13.1)
|
|
43
|
+
faraday (>= 0.7.4, < 1.0)
|
|
44
|
+
ffi (1.11.1)
|
|
45
|
+
i18n (1.6.0)
|
|
46
|
+
concurrent-ruby (~> 1.0)
|
|
47
|
+
jaro_winkler (1.5.3)
|
|
48
|
+
link_header (0.0.8)
|
|
49
|
+
method_source (0.9.2)
|
|
50
|
+
minitest (5.12.2)
|
|
51
|
+
multipart-post (2.1.1)
|
|
52
|
+
parallel (1.17.0)
|
|
53
|
+
parser (2.6.3.0)
|
|
54
|
+
ast (~> 2.4.0)
|
|
55
|
+
pry (0.12.2)
|
|
56
|
+
coderay (~> 1.1.0)
|
|
57
|
+
method_source (~> 0.9.0)
|
|
58
|
+
rack (2.0.7)
|
|
59
|
+
rainbow (3.0.0)
|
|
60
|
+
rake (12.3.3)
|
|
61
|
+
rspec (3.8.0)
|
|
62
|
+
rspec-core (~> 3.8.0)
|
|
63
|
+
rspec-expectations (~> 3.8.0)
|
|
64
|
+
rspec-mocks (~> 3.8.0)
|
|
65
|
+
rspec-core (3.8.2)
|
|
66
|
+
rspec-support (~> 3.8.0)
|
|
67
|
+
rspec-expectations (3.8.4)
|
|
68
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
69
|
+
rspec-support (~> 3.8.0)
|
|
70
|
+
rspec-its (1.3.0)
|
|
71
|
+
rspec-core (>= 3.0.0)
|
|
72
|
+
rspec-expectations (>= 3.0.0)
|
|
73
|
+
rspec-mocks (3.8.1)
|
|
74
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
75
|
+
rspec-support (~> 3.8.0)
|
|
76
|
+
rspec-support (3.8.2)
|
|
77
|
+
rspec_junit_formatter (0.4.1)
|
|
78
|
+
rspec-core (>= 2, < 4, != 2.12.0)
|
|
79
|
+
rubocop (0.73.0)
|
|
80
|
+
jaro_winkler (~> 1.5.1)
|
|
81
|
+
parallel (~> 1.10)
|
|
82
|
+
parser (>= 2.6)
|
|
83
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
84
|
+
ruby-progressbar (~> 1.7)
|
|
85
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
|
86
|
+
rubocop-performance (1.4.1)
|
|
87
|
+
rubocop (>= 0.71.0)
|
|
88
|
+
rubocop-rspec (1.34.1)
|
|
89
|
+
rubocop (>= 0.60.0)
|
|
90
|
+
ruby-progressbar (1.10.1)
|
|
91
|
+
thread_safe (0.3.6)
|
|
92
|
+
typhoeus (1.3.1)
|
|
93
|
+
ethon (>= 0.9.0)
|
|
94
|
+
tzinfo (1.2.5)
|
|
95
|
+
thread_safe (~> 0.1)
|
|
96
|
+
unicode-display_width (1.6.0)
|
|
97
|
+
zeitwerk (2.1.10)
|
|
98
|
+
|
|
99
|
+
PLATFORMS
|
|
100
|
+
ruby
|
|
101
|
+
|
|
102
|
+
DEPENDENCIES
|
|
103
|
+
bundler
|
|
104
|
+
carwow_rubocop
|
|
105
|
+
pry
|
|
106
|
+
rake
|
|
107
|
+
restful_resource!
|
|
108
|
+
rspec
|
|
109
|
+
rspec-its
|
|
110
|
+
rspec_junit_formatter
|
|
111
|
+
|
|
112
|
+
BUNDLED WITH
|
|
113
|
+
2.0.2
|
|
@@ -88,7 +88,7 @@ module RestfulResource
|
|
|
88
88
|
timeout: nil,
|
|
89
89
|
open_timeout: nil,
|
|
90
90
|
faraday_config: nil,
|
|
91
|
-
faraday_options:
|
|
91
|
+
faraday_options: {})
|
|
92
92
|
api_name = instrumentation[:api_name] ||= 'api'
|
|
93
93
|
instrumentation[:request_instrument_name] ||= "http.#{api_name}"
|
|
94
94
|
instrumentation[:cache_instrument_name] ||= "http_cache.#{api_name}"
|
|
@@ -202,7 +202,7 @@ module RestfulResource
|
|
|
202
202
|
cache_instrument_name: nil,
|
|
203
203
|
server_cache_instrument_name: nil,
|
|
204
204
|
faraday_config: nil,
|
|
205
|
-
faraday_options:
|
|
205
|
+
faraday_options: {})
|
|
206
206
|
|
|
207
207
|
@connection = Faraday.new(nil, faraday_options) do |b|
|
|
208
208
|
b.request :json
|
|
@@ -253,6 +253,7 @@ module RestfulResource
|
|
|
253
253
|
req.url request.url
|
|
254
254
|
|
|
255
255
|
req.headers = req.headers.merge(request.headers)
|
|
256
|
+
req.headers = req.headers.merge(x_client_timeout: req.options[:timeout]) if req.options[:timeout]
|
|
256
257
|
end
|
|
257
258
|
|
|
258
259
|
Response.new(body: response.body, headers: response.headers, status: response.status)
|
|
@@ -264,6 +265,12 @@ module RestfulResource
|
|
|
264
265
|
response = e.response
|
|
265
266
|
raise ClientError, request unless response
|
|
266
267
|
|
|
268
|
+
handle_error(request, response)
|
|
269
|
+
rescue Faraday::ServerError => e
|
|
270
|
+
handle_error(request, e.response)
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
def handle_error(request, response)
|
|
267
274
|
case response[:status]
|
|
268
275
|
when 404 then raise HttpClient::ResourceNotFound.new(request, response)
|
|
269
276
|
when 409 then raise HttpClient::Conflict.new(request, response)
|
data/restful_resource.gemspec
CHANGED
|
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
|
|
|
26
26
|
spec.add_development_dependency 'rspec-its'
|
|
27
27
|
|
|
28
28
|
spec.add_dependency 'activesupport'
|
|
29
|
-
spec.add_dependency 'faraday'
|
|
29
|
+
spec.add_dependency 'faraday', '~> 0.15.0'
|
|
30
30
|
spec.add_dependency 'faraday-cdn-metrics'
|
|
31
31
|
spec.add_dependency 'faraday-encoding'
|
|
32
32
|
spec.add_dependency 'faraday-http-cache'
|
|
@@ -2,12 +2,8 @@ require_relative '../spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe RestfulResource::Base, 'authorization' do
|
|
4
4
|
before do
|
|
5
|
-
class FirstClient < RestfulResource::Base
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
class SecondClient < RestfulResource::Base
|
|
9
|
-
end
|
|
10
|
-
|
|
5
|
+
class FirstClient < RestfulResource::Base; end
|
|
6
|
+
class SecondClient < RestfulResource::Base; end
|
|
11
7
|
class NotConfiguredClient < RestfulResource::Base; end
|
|
12
8
|
|
|
13
9
|
class FirstTest < FirstClient
|
|
@@ -3,8 +3,10 @@ require_relative '../spec_helper'
|
|
|
3
3
|
RSpec.describe RestfulResource::Base do
|
|
4
4
|
before do
|
|
5
5
|
@mock_http = double('mock_http')
|
|
6
|
-
allow(
|
|
7
|
-
|
|
6
|
+
allow(Make).to receive(:http).and_return(@mock_http)
|
|
7
|
+
Make.configure(base_url: 'http://api.carwow.co.uk/')
|
|
8
|
+
allow(Model).to receive(:http).and_return(@mock_http)
|
|
9
|
+
Model.configure(base_url: 'http://api.carwow.co.uk/')
|
|
8
10
|
end
|
|
9
11
|
|
|
10
12
|
it 'acts as an openobject' do
|
|
@@ -143,9 +145,14 @@ RSpec.describe RestfulResource::Base do
|
|
|
143
145
|
end
|
|
144
146
|
|
|
145
147
|
describe '#base_url' do
|
|
148
|
+
before do
|
|
149
|
+
@mock_http = double('mock_http')
|
|
150
|
+
allow(TestA).to receive(:http).and_return(@mock_http)
|
|
151
|
+
allow(TestB).to receive(:http).and_return(@mock_http)
|
|
152
|
+
end
|
|
153
|
+
|
|
146
154
|
it 'is different for each subclass of Base' do
|
|
147
155
|
BaseA.configure(base_url: 'http://a.carwow.co.uk')
|
|
148
|
-
|
|
149
156
|
BaseB.configure(base_url: 'http://b.carwow.co.uk')
|
|
150
157
|
|
|
151
158
|
expect_get('http://a.carwow.co.uk/testa/1', RestfulResource::Response.new)
|
|
@@ -385,6 +392,7 @@ RSpec.describe RestfulResource::Base do
|
|
|
385
392
|
let(:faraday_options) { double }
|
|
386
393
|
|
|
387
394
|
it 'passes arguments to HttpClient' do
|
|
395
|
+
client = Class.new(described_class)
|
|
388
396
|
expect(RestfulResource::HttpClient).to receive(:new).with(username: username,
|
|
389
397
|
password: password,
|
|
390
398
|
auth_token: auth_token,
|
|
@@ -397,7 +405,7 @@ RSpec.describe RestfulResource::Base do
|
|
|
397
405
|
faraday_options: faraday_options
|
|
398
406
|
)
|
|
399
407
|
|
|
400
|
-
|
|
408
|
+
client.configure(base_url: 'http://foo.bar',
|
|
401
409
|
username: username,
|
|
402
410
|
password: password,
|
|
403
411
|
auth_token: auth_token,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
require_relative '../spec_helper'
|
|
2
2
|
|
|
3
3
|
RSpec.describe RestfulResource::HttpClient do
|
|
4
|
-
def faraday_connection
|
|
5
|
-
Faraday.new do |builder|
|
|
4
|
+
def faraday_connection(opts = {})
|
|
5
|
+
Faraday.new(opts) do |builder|
|
|
6
6
|
builder.request :url_encoded
|
|
7
7
|
builder.response :raise_error
|
|
8
8
|
builder.adapter :test do |stubs|
|
|
@@ -292,4 +292,50 @@ RSpec.describe RestfulResource::HttpClient do
|
|
|
292
292
|
expect(response.status).to eq 200
|
|
293
293
|
end
|
|
294
294
|
end
|
|
295
|
+
|
|
296
|
+
describe 'X-Client-Timeout' do
|
|
297
|
+
let(:http_client) { described_class.new(connection: connection, timeout: timeout) }
|
|
298
|
+
let(:connection) do
|
|
299
|
+
conn = faraday_connection do |stubs|
|
|
300
|
+
stubs.get('http://httpbin.org/get', required_headers) { |_env| [200, {}, nil] }
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
conn.options[:timeout] = timeout
|
|
304
|
+
|
|
305
|
+
conn
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
context 'when explicit timeout set on connection' do
|
|
310
|
+
let(:timeout) { 5 }
|
|
311
|
+
let(:required_headers) { { 'X-Client-Timeout' => 5 } }
|
|
312
|
+
it 'sets X-Client-Timeout correctly' do
|
|
313
|
+
response = http_client.get('http://httpbin.org/get')
|
|
314
|
+
|
|
315
|
+
expect(response.status).to eq 200
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
context 'when not explicit timeout set' do
|
|
320
|
+
let(:timeout) { nil }
|
|
321
|
+
let(:required_headers) { {} }
|
|
322
|
+
|
|
323
|
+
it 'sets X-Client-Timeout correctly' do
|
|
324
|
+
response = http_client.get('http://httpbin.org/get')
|
|
325
|
+
|
|
326
|
+
expect(response.status).to eq 200
|
|
327
|
+
end
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
context 'when set on request' do
|
|
331
|
+
let(:timeout) { nil }
|
|
332
|
+
let(:required_headers) { { 'X-Client-Timeout' => 1 } }
|
|
333
|
+
|
|
334
|
+
it 'sets X-Client-Timeout correctly' do
|
|
335
|
+
response = http_client.get('http://httpbin.org/get', timeout: 1)
|
|
336
|
+
|
|
337
|
+
expect(response.status).to eq 200
|
|
338
|
+
end
|
|
339
|
+
end
|
|
340
|
+
end
|
|
295
341
|
end
|
|
@@ -3,8 +3,8 @@ require_relative '../spec_helper'
|
|
|
3
3
|
RSpec.describe RestfulResource::RailsValidations do
|
|
4
4
|
before do
|
|
5
5
|
@mock_http = double('mock_http')
|
|
6
|
-
|
|
7
|
-
allow(
|
|
6
|
+
Dealer.configure(base_url: 'http://api.carwow.co.uk/')
|
|
7
|
+
allow(Dealer).to receive(:http).and_return(@mock_http)
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
context '#patch without errors' do
|
|
@@ -3,8 +3,8 @@ require_relative '../spec_helper'
|
|
|
3
3
|
RSpec.describe RestfulResource::Redirections do
|
|
4
4
|
before do
|
|
5
5
|
@mock_http = double('mock_http')
|
|
6
|
-
allow(
|
|
7
|
-
|
|
6
|
+
allow(ModelWithRedirections).to receive(:http).and_return(@mock_http)
|
|
7
|
+
ModelWithRedirections.configure(base_url: 'http://api.carwow.co.uk/')
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
describe '#post' do
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: restful_resource
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.6.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Santoro
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2019-
|
|
12
|
+
date: 2019-10-03 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: bundler
|
|
@@ -113,16 +113,16 @@ dependencies:
|
|
|
113
113
|
name: faraday
|
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
|
115
115
|
requirements:
|
|
116
|
-
- - "
|
|
116
|
+
- - "~>"
|
|
117
117
|
- !ruby/object:Gem::Version
|
|
118
|
-
version:
|
|
118
|
+
version: 0.15.0
|
|
119
119
|
type: :runtime
|
|
120
120
|
prerelease: false
|
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
|
122
122
|
requirements:
|
|
123
|
-
- - "
|
|
123
|
+
- - "~>"
|
|
124
124
|
- !ruby/object:Gem::Version
|
|
125
|
-
version:
|
|
125
|
+
version: 0.15.0
|
|
126
126
|
- !ruby/object:Gem::Dependency
|
|
127
127
|
name: faraday-cdn-metrics
|
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -237,6 +237,7 @@ files:
|
|
|
237
237
|
- ".rubocop_todo.yml"
|
|
238
238
|
- CHANGELOG.md
|
|
239
239
|
- Gemfile
|
|
240
|
+
- Gemfile.lock
|
|
240
241
|
- LICENSE.txt
|
|
241
242
|
- README.md
|
|
242
243
|
- Rakefile
|