rest-client-wrapper 4.0.0 → 5.0.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 +47 -47
- data/lib/rest_client_wrapper/authenticators/oauth.rb +4 -4
- data/lib/rest_client_wrapper/http.rb +1 -1
- data/lib/rest_client_wrapper/paginators/echo.rb +4 -4
- data/lib/rest_client_wrapper/paginators/echo_paginator.rb +5 -5
- data/lib/rest_client_wrapper/paginators/header_link.rb +6 -6
- data/lib/rest_client_wrapper/paginators/header_link_paginator.rb +6 -6
- data/lib/rest_client_wrapper/request.rb +5 -5
- data/lib/rest_client_wrapper/rest_client.rb +10 -10
- data/lib/rest_client_wrapper/version.rb +1 -1
- data/rest-client-wrapper.gemspec +6 -11
- metadata +20 -109
- data/spec/authenticators/oauth_spec.rb +0 -103
- data/spec/factories/request.rb +0 -48
- data/spec/factories/response.rb +0 -47
- data/spec/request_spec.rb +0 -185
- data/spec/rest_client_spec.rb +0 -249
- data/spec/spec_helper.rb +0 -75
- data/spec/support/factory_bot.rb +0 -28
- data/spec/support/stub_helper.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fb801363ad2583dd1774f9c662fea54d6fe3b42747296e959e51a712f5f0795
|
4
|
+
data.tar.gz: 1ff4d4aed156a6a99467997d20f1713a72d4976e9082fba2fda3e8589b2ee6d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2804b60c91e9d6df61cda9471eae4b3af1f3297d0dd21b47e957077b0873df55784d207ac595acc9e56b819ba05910dd11100e43604d78a0bb53773cdde56caa
|
7
|
+
data.tar.gz: db9077dfaf78eed8d79cca584949a4ceb0ca4a13fa4a02ab5068bdc098d7b84a15488b1b86e05f34b2c5e1ed1c0a1f4b3d97cd3972dcd492837215ba4e178a17
|
data/README.md
CHANGED
@@ -31,7 +31,7 @@ A `rest_client` must be created to make requests (if the rest_client requires au
|
|
31
31
|
require "rest_client_wrapper"
|
32
32
|
|
33
33
|
# Create a rest_client
|
34
|
-
rest_client = RestClientWrapper::RestClient.new(
|
34
|
+
rest_client = RestClientWrapper::RestClient.new(host: "https://www.host.com")
|
35
35
|
```
|
36
36
|
|
37
37
|
## Basic Usage: `make_request`
|
@@ -40,7 +40,7 @@ The `rest_client` can make HTTP requests using `make_request`:
|
|
40
40
|
|
41
41
|
```ruby
|
42
42
|
# Make a request
|
43
|
-
response = rest_client.make_request(
|
43
|
+
response = rest_client.make_request(http_method: :get, uri: "https://www.host.com")
|
44
44
|
```
|
45
45
|
<a name="get_started"></a>
|
46
46
|
## Basic Usage: `execute`
|
@@ -51,23 +51,23 @@ _Segment parameters_ can be added to an existing `request`:
|
|
51
51
|
|
52
52
|
```ruby
|
53
53
|
# Create an HTTP request with a segmented uri
|
54
|
-
request = Request.new(
|
54
|
+
request = Request.new(http_method: :get, uri: "/%<segment_1>s/%<segment_2>s")
|
55
55
|
|
56
56
|
# Add the segment parameter(s) to the request ('%<segment_x>s' in the uri will be replaced with the matching segment param when the request is executed)
|
57
57
|
request.segment_params = { segment_1: "user_id_0001", segment_2: "course_id_0001" }
|
58
58
|
|
59
59
|
# Execute a request
|
60
|
-
response = rest_client.execute(
|
60
|
+
response = rest_client.execute(request: request)
|
61
61
|
```
|
62
62
|
|
63
63
|
_Segment parameters_ can be created with the `request`:
|
64
64
|
|
65
65
|
```ruby
|
66
66
|
# Segment parameters can be created with the request
|
67
|
-
request = Request.new(
|
67
|
+
request = Request.new(http_method: :post, uri: "/%<segment_1>s", segment_params: { segment_1: "user_id_0001" }, payload: { first_name: "name" }, headers: { content_type: "application/json" })
|
68
68
|
|
69
69
|
# Execute a request
|
70
|
-
response = rest_client.execute(
|
70
|
+
response = rest_client.execute(request: request)
|
71
71
|
```
|
72
72
|
<a name="authentication"></a>
|
73
73
|
## Authentication
|
@@ -78,10 +78,10 @@ The `rest_client` can make authenticated HTTP requests using an `authenticator`.
|
|
78
78
|
|
79
79
|
```ruby
|
80
80
|
# Add a Basic authenticator to the rest_client
|
81
|
-
rest_client.authenticator = Authenticator::Basic.new(
|
81
|
+
rest_client.authenticator = Authenticator::Basic.new(username: "username", password: "password")
|
82
82
|
|
83
83
|
# Make a request
|
84
|
-
response = rest_client.make_request(
|
84
|
+
response = rest_client.make_request(http_method: :get, uri: "https://www.host.com/api/v1/resource")
|
85
85
|
```
|
86
86
|
|
87
87
|
### Custom
|
@@ -93,39 +93,39 @@ response = rest_client.make_request({ http_method: :get, uri: "https://www.host.
|
|
93
93
|
```ruby
|
94
94
|
# Add a Custom authenticator using query_param
|
95
95
|
# The custom auth parameter will be added as a query parameter
|
96
|
-
rest_client.authenticator = Authenticator::Custom.new(
|
96
|
+
rest_client.authenticator = Authenticator::Custom.new(type: :query_param, auth_param: { custom_auth_param: "auth_value" })
|
97
97
|
|
98
98
|
# Make a request
|
99
|
-
response = rest_client.make_request(
|
99
|
+
response = rest_client.make_request(http_method: :get, uri: "https://www.host.com/api/v1/resource")
|
100
100
|
```
|
101
101
|
|
102
102
|
```ruby
|
103
103
|
# Add a Custom authenticator using header
|
104
104
|
# The custom auth parameter will be added to the request header
|
105
|
-
rest_client.authenticator = Authenticator::Custom.new(
|
105
|
+
rest_client.authenticator = Authenticator::Custom.new(type: :header, auth_param: { custom_auth_param: "auth_value" })
|
106
106
|
|
107
107
|
# Make a request
|
108
|
-
response = rest_client.make_request(
|
108
|
+
response = rest_client.make_request(http_method: :get, uri: "https://www.host.com/api/v1/resource")
|
109
109
|
```
|
110
110
|
|
111
111
|
### OAuth
|
112
112
|
|
113
113
|
```ruby
|
114
114
|
# Add an OAuth authenticator to the rest_client
|
115
|
-
rest_client.authenticator = Authenticator::Oauth.new(
|
115
|
+
rest_client.authenticator = Authenticator::Oauth.new(site: "https://www.host.com", token_url_path: "token_url_path", client_id: "client_id", client_secret: "secret")
|
116
116
|
|
117
117
|
# Make a request
|
118
|
-
response = rest_client.make_request(
|
118
|
+
response = rest_client.make_request(http_method: :get, uri: "/api/v1/user")
|
119
119
|
```
|
120
120
|
|
121
121
|
### Token
|
122
122
|
|
123
123
|
```ruby
|
124
124
|
# Add a Token authenticator to the rest_client
|
125
|
-
rest_client.authenticator = Authenticator::Token.new(
|
125
|
+
rest_client.authenticator = Authenticator::Token.new(access_token: "access_token")
|
126
126
|
|
127
127
|
# Make a request
|
128
|
-
response = rest_client.make_request(
|
128
|
+
response = rest_client.make_request(http_method: :get, uri: "/api/v1/user")
|
129
129
|
```
|
130
130
|
|
131
131
|
## Pagination
|
@@ -139,7 +139,7 @@ The `rest_client` can make paginated HTTP requests using a `paginator`.
|
|
139
139
|
rest_client.paginator = Paginator::HeaderLink.new
|
140
140
|
|
141
141
|
# Make a request for paginated data
|
142
|
-
rest_client.make_request_for_pages(
|
142
|
+
rest_client.make_request_for_pages(http_method: :get, uri: "/api/v1/user")
|
143
143
|
```
|
144
144
|
|
145
145
|
### Echo360
|
@@ -148,7 +148,7 @@ rest_client.make_request_for_pages({ http_method: :get, uri: "/api/v1/user" })
|
|
148
148
|
# Add an Echo paginator to the rest_client
|
149
149
|
rest_client.paginator = Paginator::Echo.new
|
150
150
|
|
151
|
-
rest_client.make_request_for_pages(
|
151
|
+
rest_client.make_request_for_pages(http_method: :get, uri: "/api/v1/user")
|
152
152
|
```
|
153
153
|
|
154
154
|
---
|
@@ -184,7 +184,7 @@ config = {
|
|
184
184
|
}
|
185
185
|
}
|
186
186
|
|
187
|
-
rest_client = RestClientWrapper::RestClient.new(
|
187
|
+
rest_client = RestClientWrapper::RestClient.new(host: "host")
|
188
188
|
```
|
189
189
|
|
190
190
|
If the caller wishes for additional HTTP codes to be handled, they can be specified in the `config`:
|
@@ -197,7 +197,7 @@ config = {
|
|
197
197
|
}
|
198
198
|
}
|
199
199
|
|
200
|
-
rest_client = RestClientWrapper::RestClient.new(
|
200
|
+
rest_client = RestClientWrapper::RestClient.new(host: "host", config: config)
|
201
201
|
```
|
202
202
|
|
203
203
|
## make_request
|
@@ -389,8 +389,8 @@ _Response_ objects have the following methods:
|
|
389
389
|
|
390
390
|
```ruby
|
391
391
|
begin
|
392
|
-
request = Request.new(
|
393
|
-
response = rest_client.execute(
|
392
|
+
request = Request.new(http_method: :get, uri: "https://www.host.com/public/api/v1/resource")
|
393
|
+
response = rest_client.execute(request: request)
|
394
394
|
rescue RestClientError => e
|
395
395
|
e.response
|
396
396
|
end
|
@@ -408,14 +408,14 @@ end
|
|
408
408
|
host_url = "https://www.host.com"
|
409
409
|
username = "api_user_name"
|
410
410
|
password = "password"
|
411
|
-
client = Client.new(
|
412
|
-
client.authenticator = Authenticator::Basic.new(
|
413
|
-
client.paginator = Paginator::HeaderLink.new(
|
411
|
+
client = Client.new(host: host_url)
|
412
|
+
client.authenticator = Authenticator::Basic.new(username: username, password: password)
|
413
|
+
client.paginator = Paginator::HeaderLink.new(per_page: 10)
|
414
414
|
|
415
|
-
response = client.make_request(
|
415
|
+
response = client.make_request(http_method: :get, uri: "/api/v1/resource")
|
416
416
|
|
417
417
|
# paginated request
|
418
|
-
data = client.make_request_for_pages(
|
418
|
+
data = client.make_request_for_pages(http_method: :get, uri: "/api/v1/resource", data: true)
|
419
419
|
|
420
420
|
```
|
421
421
|
|
@@ -424,28 +424,28 @@ data = client.make_request_for_pages({ http_method: :get, uri: "/api/v1/resource
|
|
424
424
|
```ruby
|
425
425
|
canvas_host = "https://host.instructure.com"
|
426
426
|
canvas_access_token = "access_token"
|
427
|
-
canvas_client = Client.new(
|
428
|
-
canvas_client.authenticator = Authenticator::Token.new(
|
429
|
-
canvas_client.paginator = Paginator::HeaderLink.new(
|
427
|
+
canvas_client = Client.new(host: canvas_host)
|
428
|
+
canvas_client.authenticator = Authenticator::Token.new(access_token: canvas_access_token)
|
429
|
+
canvas_client.paginator = Paginator::HeaderLink.new(per_page: 10)
|
430
430
|
|
431
|
-
canvas_response = canvas_client.make_request(
|
431
|
+
canvas_response = canvas_client.make_request(http_method: :get, uri: "/api/v1/accounts/1/terms")
|
432
432
|
|
433
433
|
# paginated request
|
434
|
-
canvas_data = canvas_client.make_request_for_pages(
|
434
|
+
canvas_data = canvas_client.make_request_for_pages(http_method: :get, uri: "/api/v1/accounts/1/terms", data: true)
|
435
435
|
```
|
436
436
|
|
437
437
|
### Echo
|
438
438
|
|
439
439
|
```ruby
|
440
|
-
echo_host = "https://echo360.
|
440
|
+
echo_host = "https://echo360.net.au"
|
441
441
|
echo_client_id = "client_id"
|
442
442
|
echo_client_secret = "client_secret"
|
443
|
-
echo_client = Client.new(
|
444
|
-
echo_client.authenticator = Authenticator::Oauth.new(
|
445
|
-
echo_client.paginator = Paginator::Echo.new(
|
443
|
+
echo_client = Client.new(host: echo_host)
|
444
|
+
echo_client.authenticator = Authenticator::Oauth.new(site: echo_host, token_url_path: "/oauth2/access_token", client_id: echo_client_id, client_secret: echo_client_secret)
|
445
|
+
echo_client.paginator = Paginator::Echo.new(limit: 10)
|
446
446
|
|
447
|
-
echo_response = echo_client.make_request(
|
448
|
-
echo_data = echo_client.make_request_for_pages(
|
447
|
+
echo_response = echo_client.make_request(http_method: :get, uri: "/public/api/v1/terms")
|
448
|
+
echo_data = echo_client.make_request_for_pages(http_method: :get, uri: "/public/api/v1/terms", data: true)
|
449
449
|
```
|
450
450
|
|
451
451
|
## Create a request object
|
@@ -453,32 +453,32 @@ echo_data = echo_client.make_request_for_pages({ http_method: :get, uri: "/publi
|
|
453
453
|
Create a `rest_client`.
|
454
454
|
|
455
455
|
```ruby
|
456
|
-
rest_client = RestClientWrapper::RestClient.new(
|
456
|
+
rest_client = RestClientWrapper::RestClient.new(host: "https://www.host.com")
|
457
457
|
```
|
458
458
|
|
459
459
|
## Request with a segmented absolute URI
|
460
460
|
|
461
461
|
```ruby
|
462
|
-
request = Request.new(
|
462
|
+
request = Request.new(http_method: :get, uri: "https://www.host.com/public/api/v1/users/%<user_id>s")
|
463
463
|
request.segment_params = { user_id: "user_id" }
|
464
|
-
response = rest_client.execute(
|
464
|
+
response = rest_client.execute(request: request)
|
465
465
|
```
|
466
466
|
|
467
467
|
## Request with a segmented resource path
|
468
468
|
|
469
469
|
```ruby
|
470
|
-
rest_client = RestClientWrapper::RestClient.new(
|
471
|
-
request = Request.new(
|
470
|
+
rest_client = RestClientWrapper::RestClient.new(host: "https://www.host.com")
|
471
|
+
request = Request.new(http_method: :get, uri: "/public/api/v1/users/%<user_id>s")
|
472
472
|
request.segment_params = { user_id: "user_id" }
|
473
|
-
response = rest_client.execute(
|
473
|
+
response = rest_client.execute(request: request)
|
474
474
|
```
|
475
475
|
|
476
476
|
## Query Parameters
|
477
477
|
|
478
478
|
```ruby
|
479
|
-
rest_client = RestClientWrapper::RestClient.new(
|
480
|
-
request = Request.new(
|
479
|
+
rest_client = RestClientWrapper::RestClient.new(host: "https://www.host.com")
|
480
|
+
request = Request.new(http_method: :put, uri: "/api/v1/resource/")
|
481
481
|
request.payload = { user_id: "user_id" }
|
482
482
|
request.query_params = { id: "value" }
|
483
|
-
response = rest_client.execute(
|
483
|
+
response = rest_client.execute(request: request)
|
484
484
|
```
|
@@ -50,14 +50,14 @@ module RestClientWrapper
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def generate_auth
|
53
|
-
Authenticator::Oauth.authenticate(
|
53
|
+
Authenticator::Oauth.authenticate(client_id: @client_id) if @@api_client&.[](@client_id)&.[](:access_token).nil?
|
54
54
|
access_token = @@api_client&.[](@client_id)&.[](:access_token)
|
55
55
|
raise StandardError "Unable to authenticate #{ @client_id }" if @@api_client&.[](@client_id)&.[](:access_token).nil?
|
56
56
|
|
57
57
|
return { Authorization: "Bearer #{ access_token }" }
|
58
58
|
end
|
59
59
|
|
60
|
-
def self.authenticate(client_id:, access_token: nil)
|
60
|
+
def self.authenticate(client_id:, access_token: nil) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
61
61
|
# Ensure that other threads aren't checking and updating the token at the same time
|
62
62
|
@@api_client[client_id][:lock].synchronize do
|
63
63
|
# Return access_token from @@api_client when the current_token is different to what's in @@api_client as it's already been refreshed
|
@@ -65,12 +65,12 @@ module RestClientWrapper
|
|
65
65
|
|
66
66
|
payload = {
|
67
67
|
grant_type: GrantType::CLIENT_CREDENTIALS,
|
68
|
-
client_id
|
68
|
+
client_id:,
|
69
69
|
client_secret: @@api_client&.[](client_id)&.[](:settings)&.[](:client_secret)
|
70
70
|
}
|
71
71
|
url = "#{ @@api_client&.[](client_id)&.[](:settings)&.[](:site) }#{ @@api_client&.[](client_id)&.[](:settings)&.[](:token_url_path) }"
|
72
72
|
|
73
|
-
response = ::RestClient::Request.execute(
|
73
|
+
response = ::RestClient::Request.execute(method: :post, url:, payload:)
|
74
74
|
|
75
75
|
if Http.ok?(response.code)
|
76
76
|
content_type = MIME::Types[response&.headers&.[](:content_type)].first
|
@@ -33,7 +33,7 @@ module RestClientWrapper
|
|
33
33
|
|
34
34
|
def initialize(limit: Paginate::DEFAULT_PAGINATION_PAGE_SIZE)
|
35
35
|
@rest_client = nil
|
36
|
-
@config = { limit:
|
36
|
+
@config = { limit: }
|
37
37
|
end
|
38
38
|
|
39
39
|
def paginate(http_method:, uri:, segment_params: {}, query_params: {}, headers: {}, data: false)
|
@@ -42,14 +42,14 @@ module RestClientWrapper
|
|
42
42
|
query_params.reverse_merge!(@config)
|
43
43
|
responses = []
|
44
44
|
loop do
|
45
|
-
response = @rest_client.make_request(
|
46
|
-
block_given? ? yield(response) : (responses << response)
|
45
|
+
response = @rest_client.make_request(http_method:, uri:, segment_params:, query_params:, headers:)
|
46
|
+
(block_given?) ? yield(response) : (responses << response)
|
47
47
|
links = _pagination_links(response)
|
48
48
|
break unless links.key?(:offset)
|
49
49
|
|
50
50
|
query_params[:offset] = links[:offset]
|
51
51
|
end
|
52
|
-
return data ? responses.map(&:body).pluck(:data).flatten : responses
|
52
|
+
return (data) ? responses.map(&:body).pluck(:data).flatten : responses
|
53
53
|
end
|
54
54
|
|
55
55
|
private
|
@@ -33,7 +33,7 @@ module RestClientWrapper
|
|
33
33
|
|
34
34
|
def initialize(limit: Paginate::DEFAULT_PAGINATION_PAGE_SIZE)
|
35
35
|
@rest_client = nil
|
36
|
-
@config = { limit:
|
36
|
+
@config = { limit: }
|
37
37
|
end
|
38
38
|
|
39
39
|
def paginate(http_method:, uri:, segment_params: {}, query_params: {}, headers: {}, data: false)
|
@@ -42,20 +42,20 @@ module RestClientWrapper
|
|
42
42
|
query_params.reverse_merge!(@config)
|
43
43
|
responses = []
|
44
44
|
loop do
|
45
|
-
response = @rest_client.make_request(
|
46
|
-
block_given? ? yield(response) : (responses << response)
|
45
|
+
response = @rest_client.make_request(http_method:, uri:, segment_params:, query_params:, headers:)
|
46
|
+
(block_given?) ? yield(response) : (responses << response)
|
47
47
|
links = _pagination_links(response)
|
48
48
|
break unless links.key?(:offset)
|
49
49
|
|
50
50
|
query_params[:offset] = links[:offset]
|
51
51
|
end
|
52
|
-
return data ? responses.map(&:body).pluck(:data).flatten : responses
|
52
|
+
return (data) ? responses.map(&:body).pluck(:data).flatten : responses
|
53
53
|
end
|
54
54
|
|
55
55
|
private
|
56
56
|
|
57
57
|
def _pagination_links(response)
|
58
|
-
next_l = response&.body.instance_of?(Hash) ? response&.body&.[](:next) || "" : ""
|
58
|
+
next_l = (response&.body.instance_of?(Hash)) ? response&.body&.[](:next) || "" : ""
|
59
59
|
next_h = Rack::Utils.parse_query(URI.parse(next_l)&.query)
|
60
60
|
return next_h.symbolize_keys!
|
61
61
|
end
|
@@ -33,7 +33,7 @@ module RestClientWrapper
|
|
33
33
|
|
34
34
|
def initialize(per_page: Paginate::DEFAULT_PAGINATION_PAGE_SIZE)
|
35
35
|
@rest_client = nil
|
36
|
-
@config = { page: nil, per_page:
|
36
|
+
@config = { page: nil, per_page: }
|
37
37
|
end
|
38
38
|
|
39
39
|
def paginate(http_method:, uri:, segment_params: {}, query_params: {}, headers: {}, data: false)
|
@@ -43,18 +43,18 @@ module RestClientWrapper
|
|
43
43
|
responses = []
|
44
44
|
loop.with_index(1) do |_, page|
|
45
45
|
query_params[:page] = page
|
46
|
-
response = @rest_client.make_request(
|
47
|
-
block_given? ? yield(response) : (responses << response)
|
46
|
+
response = @rest_client.make_request(http_method:, uri:, segment_params:, query_params:, headers:)
|
47
|
+
(block_given?) ? yield(response) : (responses << response)
|
48
48
|
links = _pagination_links(response)
|
49
49
|
break unless links.key?(:next)
|
50
50
|
end
|
51
|
-
return data ? responses.map(&:body).flatten : responses
|
51
|
+
return (data) ? responses.map(&:body).flatten : responses
|
52
52
|
end
|
53
53
|
|
54
54
|
private
|
55
55
|
|
56
|
-
def _pagination_links(response)
|
57
|
-
re_uri = "
|
56
|
+
def _pagination_links(response) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
57
|
+
re_uri = "<(.*?)>".freeze
|
58
58
|
re_rel = "current|next|first|last".freeze
|
59
59
|
links_a = response&.headers&.[](:link)&.split(",") || []
|
60
60
|
links_h = {}
|
@@ -33,7 +33,7 @@ module RestClientWrapper
|
|
33
33
|
|
34
34
|
def initialize(per_page: Paginate::DEFAULT_PAGINATION_PAGE_SIZE)
|
35
35
|
@rest_client = nil
|
36
|
-
@config = { page: nil, per_page:
|
36
|
+
@config = { page: nil, per_page: }
|
37
37
|
end
|
38
38
|
|
39
39
|
def paginate(http_method:, uri:, segment_params: {}, query_params: {}, headers: {}, data: false)
|
@@ -43,18 +43,18 @@ module RestClientWrapper
|
|
43
43
|
responses = []
|
44
44
|
loop.with_index(1) do |_, page|
|
45
45
|
query_params[:page] = page
|
46
|
-
response = @rest_client.make_request(
|
47
|
-
block_given? ? yield(response) : (responses << response)
|
46
|
+
response = @rest_client.make_request(http_method:, uri:, segment_params:, query_params:, headers:)
|
47
|
+
(block_given?) ? yield(response) : (responses << response)
|
48
48
|
links = _pagination_links(response)
|
49
49
|
break unless links.key?(:next)
|
50
50
|
end
|
51
|
-
return data ? responses.map(&:body).flatten : responses
|
51
|
+
return (data) ? responses.map(&:body).flatten : responses
|
52
52
|
end
|
53
53
|
|
54
54
|
private
|
55
55
|
|
56
|
-
def _pagination_links(response)
|
57
|
-
re_uri = "
|
56
|
+
def _pagination_links(response) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
57
|
+
re_uri = "<(.*?)>".freeze
|
58
58
|
re_rel = "current|next|first|last".freeze
|
59
59
|
links_a = response&.headers&.[](:link)&.split(",") || []
|
60
60
|
links_h = {}
|
@@ -30,11 +30,11 @@ module RestClientWrapper
|
|
30
30
|
|
31
31
|
def initialize(**params)
|
32
32
|
@uri = params[:uri]
|
33
|
-
self.headers = params[:headers].nil? ? {} : params[:headers]
|
33
|
+
self.headers = (params[:headers].nil?) ? {} : params[:headers]
|
34
34
|
self.http_method = params[:http_method]
|
35
|
-
self.segment_params = params[:segment_params].nil? ? {} : params[:segment_params]
|
36
|
-
self.payload = params[:payload].nil? ? {} : params[:payload]
|
37
|
-
self.query_params = params[:query_params].nil? ? {} : params[:query_params]
|
35
|
+
self.segment_params = (params[:segment_params].nil?) ? {} : params[:segment_params]
|
36
|
+
self.payload = (params[:payload].nil?) ? {} : params[:payload]
|
37
|
+
self.query_params = (params[:query_params].nil?) ? {} : params[:query_params]
|
38
38
|
end
|
39
39
|
|
40
40
|
def http_method=(http_method)
|
@@ -67,7 +67,7 @@ module RestClientWrapper
|
|
67
67
|
def headers=(headers)
|
68
68
|
raise TypeError, "Request headers parameters is not a hash" unless headers.is_a?(Hash)
|
69
69
|
|
70
|
-
@headers.nil? ? @headers = headers : @headers.merge!(headers)
|
70
|
+
(@headers.nil?) ? @headers = headers : @headers.merge!(headers)
|
71
71
|
end
|
72
72
|
|
73
73
|
end
|
@@ -62,13 +62,13 @@ module RestClientWrapper
|
|
62
62
|
url = _build_uri(request)
|
63
63
|
|
64
64
|
loop do
|
65
|
-
access_token = @authenticator.is_a?(Authenticator::Oauth) ? @authenticator.access_token : nil
|
65
|
+
access_token = (@authenticator.is_a?(Authenticator::Oauth)) ? @authenticator.access_token : nil
|
66
66
|
response_code = nil
|
67
67
|
|
68
68
|
begin
|
69
|
-
payload = Request::HTTP_METHOD_FOR_JSON.include?(request.http_method) && request.headers[:content_type] == :json ? request.payload.to_json : request.payload
|
69
|
+
payload = (Request::HTTP_METHOD_FOR_JSON.include?(request.http_method) && request.headers[:content_type] == :json) ? request.payload.to_json : request.payload
|
70
70
|
request.headers[:params] = request.query_params
|
71
|
-
response = ::RestClient::Request.execute(
|
71
|
+
response = ::RestClient::Request.execute(method: request.http_method, url:, payload:, headers: request.headers)
|
72
72
|
response_code = response&.code
|
73
73
|
rescue StandardError => e
|
74
74
|
response_code = e.response&.code
|
@@ -85,20 +85,20 @@ module RestClientWrapper
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def execute_paginated_request(request:, data: true)
|
88
|
-
return self.make_request_for_pages({ http_method: request.http_method, uri: request.uri, segment_params: request.segment_params, query_params: request.query_params, headers: request.headers, data:
|
88
|
+
return self.make_request_for_pages({ http_method: request.http_method, uri: request.uri, segment_params: request.segment_params, query_params: request.query_params, headers: request.headers, data: }) # rubocop:disable Metrics/LineLength
|
89
89
|
end
|
90
90
|
|
91
91
|
def make_request(http_method:, uri:, payload: {}, segment_params: {}, query_params: {}, headers: {})
|
92
|
-
request = Request.new(
|
92
|
+
request = Request.new(http_method:, uri:, payload:, segment_params:, query_params:)
|
93
93
|
request.headers = headers
|
94
|
-
return self.execute(
|
94
|
+
return self.execute(request:)
|
95
95
|
end
|
96
96
|
|
97
97
|
def make_request_for_pages(http_method:, uri:, segment_params: {}, query_params: {}, headers: {}, data: false)
|
98
98
|
raise RestClientError.new("Paginator not set, unable to make API call", nil, nil) unless @paginator
|
99
99
|
|
100
100
|
@paginator.rest_client ||= self
|
101
|
-
return @paginator.paginate(
|
101
|
+
return @paginator.paginate(http_method:, uri:, segment_params:, query_params:, headers:, data:)
|
102
102
|
end
|
103
103
|
|
104
104
|
private
|
@@ -106,7 +106,7 @@ module RestClientWrapper
|
|
106
106
|
def _set_auth(request)
|
107
107
|
return if @authenticator.nil?
|
108
108
|
|
109
|
-
auth = @authenticator.respond_to?(:generate_auth) ? @authenticator.generate_auth : {}
|
109
|
+
auth = (@authenticator.respond_to?(:generate_auth)) ? @authenticator.generate_auth : {}
|
110
110
|
if @authenticator.is_a?(Authenticator::Custom)
|
111
111
|
case @authenticator.type
|
112
112
|
when :query_param
|
@@ -124,7 +124,7 @@ module RestClientWrapper
|
|
124
124
|
parsed_uri = URI.parse(uri)
|
125
125
|
raise ArgumentError, "URL host does not match config host of instance, unable to make API call" if parsed_uri.absolute? && @host.casecmp("#{ parsed_uri.scheme }://#{ parsed_uri.host }").nonzero?
|
126
126
|
|
127
|
-
return parsed_uri.absolute? ? uri : "#{ @host }#{ uri }"
|
127
|
+
return (parsed_uri.absolute?) ? uri : "#{ @host }#{ uri }"
|
128
128
|
end
|
129
129
|
|
130
130
|
def _validate_request(request)
|
@@ -172,7 +172,7 @@ module RestClientWrapper
|
|
172
172
|
|
173
173
|
def _wait_and_retry(response_code, access_token)
|
174
174
|
sleep(@retry_configs[response_code][:wait].to_f)
|
175
|
-
Authenticator::Oauth.authenticate(
|
175
|
+
Authenticator::Oauth.authenticate(client_id: @authenticator&.client_id, access_token:) if Http.unauthorized?(response_code) && @authenticator.is_a?(Authenticator::Oauth)
|
176
176
|
@retry_configs[response_code][:retry] += 1
|
177
177
|
end
|
178
178
|
|
data/rest-client-wrapper.gemspec
CHANGED
@@ -30,22 +30,17 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.summary = "Rest client wrapper"
|
31
31
|
s.description = "Generic REST client wrapper"
|
32
32
|
s.license = "GPL 3.0"
|
33
|
-
s.required_ruby_version = ">= 2.
|
33
|
+
s.required_ruby_version = ">= 3.2.2"
|
34
34
|
|
35
|
-
s.add_runtime_dependency "json", "
|
36
|
-
s.add_runtime_dependency "oauth2", "
|
37
|
-
s.add_runtime_dependency "
|
38
|
-
s.add_runtime_dependency "
|
39
|
-
s.add_runtime_dependency "typhoeus", "~> 1.0", ">= 1.0.1"
|
40
|
-
|
41
|
-
s.add_development_dependency "colorize", "~> 0.7", ">= 0.7.0"
|
42
|
-
s.add_development_dependency "geminabox", "~> 0.13.0"
|
43
|
-
s.add_development_dependency "rspec", "~> 3.4", ">= 3.4.0"
|
35
|
+
s.add_runtime_dependency "json", "~> 2.6.3"
|
36
|
+
s.add_runtime_dependency "oauth2", "~> 2.0.9"
|
37
|
+
s.add_runtime_dependency "rest-client", "~> 2.1.0"
|
38
|
+
s.add_runtime_dependency "typhoeus", "~> 1.4"
|
44
39
|
|
45
40
|
s.metadata["allowed_push_host"] = "https://rubygems.org"
|
46
41
|
|
47
42
|
s.files = Dir.glob("lib/**/*.{rake,rb}") + ["#{ s.name }.gemspec", "README.md"]
|
48
|
-
s.test_files = `find spec/*`.split("\n")
|
49
43
|
s.executables = []
|
50
44
|
s.require_paths = ["lib"]
|
45
|
+
s.metadata["rubygems_mfa_required"] = "true"
|
51
46
|
end
|