rest-client-wrapper 3.0.3 → 4.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/lib/rest_client_wrapper/authenticators/basic.rb +3 -3
- data/lib/rest_client_wrapper/authenticators/custom.rb +3 -3
- data/lib/rest_client_wrapper/authenticators/oauth.rb +2 -2
- data/lib/rest_client_wrapper/paginators/echo.rb +2 -2
- data/lib/rest_client_wrapper/paginators/echo_paginator.rb +3 -3
- data/lib/rest_client_wrapper/paginators/header_link.rb +2 -2
- data/lib/rest_client_wrapper/paginators/header_link_paginator.rb +2 -2
- data/lib/rest_client_wrapper/request.rb +9 -9
- data/lib/rest_client_wrapper/rest_client.rb +16 -13
- data/lib/rest_client_wrapper/version.rb +1 -1
- data/rest-client-wrapper.gemspec +5 -5
- metadata +13 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b402585e6034813c0b9d3fa1af05e943ca106f7cdcae0b0f6e205e822250304
|
4
|
+
data.tar.gz: 64390499b6848d1dab15c57a723b9b02bded8eedf2b5f3650e8f3f8ed789f3f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8769b420a7bfe481450e0665a3f4899564dff302769bf050f7d512564b828479529a5a3859dd8fb581d714e8b4452601e102a0d28226771bc57ece9f16b4cc88
|
7
|
+
data.tar.gz: 46a6573d732840fe66240d6773db7f07ecd274d70b3a7b794b44d1bb31eca85fe514a050726571afe47538b8b4a16b260013c872b20283eb52c515df47829d6f
|
@@ -29,9 +29,9 @@ module RestClientWrapper
|
|
29
29
|
|
30
30
|
include Auth
|
31
31
|
|
32
|
-
def initialize(
|
33
|
-
@username = username
|
34
|
-
@password = password
|
32
|
+
def initialize(**config)
|
33
|
+
@username = config[:username]
|
34
|
+
@password = config[:password]
|
35
35
|
end
|
36
36
|
|
37
37
|
def generate_auth
|
@@ -32,9 +32,9 @@ module RestClientWrapper
|
|
32
32
|
|
33
33
|
TYPE = %i[header query_param].freeze
|
34
34
|
|
35
|
-
def initialize(
|
36
|
-
self.type = type
|
37
|
-
self.auth_param = auth_param
|
35
|
+
def initialize(**config)
|
36
|
+
self.type = config[:type]
|
37
|
+
self.auth_param = config[:auth_param]
|
38
38
|
end
|
39
39
|
|
40
40
|
def generate_auth
|
@@ -36,9 +36,9 @@ module RestClientWrapper
|
|
36
36
|
|
37
37
|
@@api_client = {} # rubocop:disable Style/ClassVars
|
38
38
|
|
39
|
-
def initialize(
|
39
|
+
def initialize(client_id:, **config)
|
40
40
|
@client_id = client_id
|
41
|
-
@@api_client[client_id] = { lock: Mutex.new, settings:
|
41
|
+
@@api_client[client_id] = { lock: Mutex.new, settings: config, access_token: nil, refresh_token: nil }
|
42
42
|
end
|
43
43
|
|
44
44
|
def tokens
|
@@ -36,13 +36,13 @@ module RestClientWrapper
|
|
36
36
|
@config = { limit: limit }
|
37
37
|
end
|
38
38
|
|
39
|
-
def paginate(http_method:, uri:, query_params: {}, headers: {}, data: false)
|
39
|
+
def paginate(http_method:, uri:, segment_params: {}, query_params: {}, headers: {}, data: false)
|
40
40
|
raise RestClientError.new("Client not set, unable to make API call", nil, nil) unless @rest_client
|
41
41
|
|
42
42
|
query_params.reverse_merge!(@config)
|
43
43
|
responses = []
|
44
44
|
loop do
|
45
|
-
response = @rest_client.make_request({ http_method: http_method, uri: uri, query_params: query_params, headers: headers })
|
45
|
+
response = @rest_client.make_request({ http_method: http_method, uri: uri, segment_params: segment_params, query_params: query_params, headers: headers })
|
46
46
|
block_given? ? yield(response) : (responses << response)
|
47
47
|
links = _pagination_links(response)
|
48
48
|
break unless links.key?(:offset)
|
@@ -36,13 +36,13 @@ module RestClientWrapper
|
|
36
36
|
@config = { limit: limit }
|
37
37
|
end
|
38
38
|
|
39
|
-
def paginate(http_method:, uri:, query_params: {}, headers: {}, data: false)
|
39
|
+
def paginate(http_method:, uri:, segment_params: {}, query_params: {}, headers: {}, data: false)
|
40
40
|
raise RestClientError.new("Client not set, unable to make API call", nil, nil) unless @rest_client
|
41
41
|
|
42
42
|
query_params.reverse_merge!(@config)
|
43
43
|
responses = []
|
44
44
|
loop do
|
45
|
-
response = @rest_client.make_request({ http_method: http_method, uri: uri, query_params: query_params, headers: headers })
|
45
|
+
response = @rest_client.make_request({ http_method: http_method, uri: uri, segment_params: segment_params, query_params: query_params, headers: headers })
|
46
46
|
block_given? ? yield(response) : (responses << response)
|
47
47
|
links = _pagination_links(response)
|
48
48
|
break unless links.key?(:offset)
|
@@ -55,7 +55,7 @@ module RestClientWrapper
|
|
55
55
|
private
|
56
56
|
|
57
57
|
def _pagination_links(response)
|
58
|
-
next_l = 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
|
@@ -36,14 +36,14 @@ module RestClientWrapper
|
|
36
36
|
@config = { page: nil, per_page: per_page }
|
37
37
|
end
|
38
38
|
|
39
|
-
def paginate(http_method:, uri:, query_params: {}, headers: {}, data: false)
|
39
|
+
def paginate(http_method:, uri:, segment_params: {}, query_params: {}, headers: {}, data: false)
|
40
40
|
raise RestClientError.new("Client not set, unable to make API call", nil, nil) unless @rest_client
|
41
41
|
|
42
42
|
query_params.reverse_merge!(@config)
|
43
43
|
responses = []
|
44
44
|
loop.with_index(1) do |_, page|
|
45
45
|
query_params[:page] = page
|
46
|
-
response = @rest_client.make_request({ http_method: http_method, uri: uri, query_params: query_params, headers: headers })
|
46
|
+
response = @rest_client.make_request({ http_method: http_method, uri: uri, segment_params: segment_params, query_params: query_params, headers: headers })
|
47
47
|
block_given? ? yield(response) : (responses << response)
|
48
48
|
links = _pagination_links(response)
|
49
49
|
break unless links.key?(:next)
|
@@ -36,14 +36,14 @@ module RestClientWrapper
|
|
36
36
|
@config = { page: nil, per_page: per_page }
|
37
37
|
end
|
38
38
|
|
39
|
-
def paginate(http_method:, uri:, query_params: {}, headers: {}, data: false)
|
39
|
+
def paginate(http_method:, uri:, segment_params: {}, query_params: {}, headers: {}, data: false)
|
40
40
|
raise RestClientError.new("Client not set, unable to make API call", nil, nil) unless @rest_client
|
41
41
|
|
42
42
|
query_params.reverse_merge!(@config)
|
43
43
|
responses = []
|
44
44
|
loop.with_index(1) do |_, page|
|
45
45
|
query_params[:page] = page
|
46
|
-
response = @rest_client.make_request({ http_method: http_method, uri: uri, query_params: query_params, headers: headers })
|
46
|
+
response = @rest_client.make_request({ http_method: http_method, uri: uri, segment_params: segment_params, query_params: query_params, headers: headers })
|
47
47
|
block_given? ? yield(response) : (responses << response)
|
48
48
|
links = _pagination_links(response)
|
49
49
|
break unless links.key?(:next)
|
@@ -21,20 +21,20 @@ module RestClientWrapper
|
|
21
21
|
# Request
|
22
22
|
class Request
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
attr_accessor :uri
|
25
|
+
attr_reader :headers, :http_method, :payload, :segment_params, :query_params
|
26
26
|
|
27
27
|
DEFAULT_CONTENT_TYPE = { content_type: :json, accept: :json }.freeze # default content type for post and put requests
|
28
28
|
VALID_HTTP_METHODS = %i[get post put patch delete connect options trace].freeze
|
29
29
|
HTTP_METHOD_FOR_JSON = %i[post put patch].freeze
|
30
30
|
|
31
|
-
def initialize(
|
32
|
-
@uri = uri
|
33
|
-
self.headers = headers
|
34
|
-
self.http_method = http_method
|
35
|
-
self.segment_params = segment_params
|
36
|
-
self.payload = payload
|
37
|
-
self.query_params = query_params
|
31
|
+
def initialize(**params)
|
32
|
+
@uri = params[:uri]
|
33
|
+
self.headers = params[:headers].nil? ? {} : params[:headers]
|
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]
|
38
38
|
end
|
39
39
|
|
40
40
|
def http_method=(http_method)
|
@@ -41,7 +41,7 @@ module RestClientWrapper
|
|
41
41
|
}
|
42
42
|
}.freeze
|
43
43
|
|
44
|
-
def initialize(host:, config
|
44
|
+
def initialize(host:, **config)
|
45
45
|
@host = host
|
46
46
|
@config = config
|
47
47
|
@retry_configs = {}.reverse_merge(DEFAULT_CONFIG[:retries])
|
@@ -84,22 +84,21 @@ module RestClientWrapper
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
-
def
|
88
|
-
|
89
|
-
|
90
|
-
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?
|
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: data }) # rubocop:disable Metrics/LineLength
|
89
|
+
end
|
91
90
|
|
92
|
-
|
93
|
-
request = Request.new({ http_method: http_method, uri: uri, payload: payload, query_params: query_params })
|
91
|
+
def make_request(http_method:, uri:, payload: {}, segment_params: {}, query_params: {}, headers: {})
|
92
|
+
request = Request.new({ http_method: http_method, uri: uri, payload: payload, segment_params: segment_params, query_params: query_params })
|
94
93
|
request.headers = headers
|
95
94
|
return self.execute({ request: request })
|
96
95
|
end
|
97
96
|
|
98
|
-
def make_request_for_pages(http_method:, uri:, query_params: {}, headers: {}, data: false)
|
97
|
+
def make_request_for_pages(http_method:, uri:, segment_params: {}, query_params: {}, headers: {}, data: false)
|
99
98
|
raise RestClientError.new("Paginator not set, unable to make API call", nil, nil) unless @paginator
|
100
99
|
|
101
100
|
@paginator.rest_client ||= self
|
102
|
-
return @paginator.paginate({ http_method: http_method, uri: uri, query_params: query_params, headers: headers, data: data })
|
101
|
+
return @paginator.paginate({ http_method: http_method, uri: uri, segment_params: segment_params, query_params: query_params, headers: headers, data: data })
|
103
102
|
end
|
104
103
|
|
105
104
|
private
|
@@ -121,12 +120,16 @@ module RestClientWrapper
|
|
121
120
|
end
|
122
121
|
|
123
122
|
def _build_uri(request)
|
124
|
-
|
123
|
+
uri = format(request.uri, request.segment_params)
|
124
|
+
parsed_uri = URI.parse(uri)
|
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
|
+
|
127
|
+
return parsed_uri.absolute? ? uri : "#{ @host }#{ uri }"
|
125
128
|
end
|
126
129
|
|
127
130
|
def _validate_request(request)
|
128
131
|
# Regex to find segments in uri with the pattern <segment_param>
|
129
|
-
url_segments = request.uri.scan(
|
132
|
+
url_segments = request.uri.scan(/<(.*?)>/).flatten
|
130
133
|
url_segments.each do |url_segment|
|
131
134
|
raise ArgumentError, "Segment parameter not provided for #{ url_segment }. URI #{ request.uri }" unless request.segment_params.include? url_segment.to_sym
|
132
135
|
end
|
@@ -153,8 +156,8 @@ module RestClientWrapper
|
|
153
156
|
return { ok: true } if response.body == "ok".to_json # Handle special case for Echo delete responses
|
154
157
|
|
155
158
|
return JSON.parse(response.body, { object_class: Hash, symbolize_names: true })
|
156
|
-
rescue StandardError
|
157
|
-
|
159
|
+
rescue StandardError
|
160
|
+
return response.body
|
158
161
|
end
|
159
162
|
|
160
163
|
def _reset_retries
|
data/rest-client-wrapper.gemspec
CHANGED
@@ -30,12 +30,12 @@ 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 = ">= 2.6.0"
|
34
34
|
|
35
|
-
s.add_runtime_dependency "json", "
|
36
|
-
s.add_runtime_dependency "oauth2", "
|
37
|
-
s.add_runtime_dependency "rack", "
|
38
|
-
s.add_runtime_dependency "rest-client", "
|
35
|
+
s.add_runtime_dependency "json", ">= 1.8.3"
|
36
|
+
s.add_runtime_dependency "oauth2", ">= 1.2"
|
37
|
+
s.add_runtime_dependency "rack", ">= 2.0.5"
|
38
|
+
s.add_runtime_dependency "rest-client", ">= 2.0.2"
|
39
39
|
s.add_runtime_dependency "typhoeus", "~> 1.0", ">= 1.0.1"
|
40
40
|
|
41
41
|
s.add_development_dependency "colorize", "~> 0.7", ">= 0.7.0"
|
metadata
CHANGED
@@ -1,22 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest-client-wrapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- University of Adelaide
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.8'
|
20
17
|
- - ">="
|
21
18
|
- !ruby/object:Gem::Version
|
22
19
|
version: 1.8.3
|
@@ -24,9 +21,6 @@ dependencies:
|
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '1.8'
|
30
24
|
- - ">="
|
31
25
|
- !ruby/object:Gem::Version
|
32
26
|
version: 1.8.3
|
@@ -34,42 +28,42 @@ dependencies:
|
|
34
28
|
name: oauth2
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
|
-
- - "
|
31
|
+
- - ">="
|
38
32
|
- !ruby/object:Gem::Version
|
39
33
|
version: '1.2'
|
40
34
|
type: :runtime
|
41
35
|
prerelease: false
|
42
36
|
version_requirements: !ruby/object:Gem::Requirement
|
43
37
|
requirements:
|
44
|
-
- - "
|
38
|
+
- - ">="
|
45
39
|
- !ruby/object:Gem::Version
|
46
40
|
version: '1.2'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
42
|
name: rack
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
|
-
- - "
|
45
|
+
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: 2.0.5
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
58
|
-
- - "
|
52
|
+
- - ">="
|
59
53
|
- !ruby/object:Gem::Version
|
60
54
|
version: 2.0.5
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
56
|
name: rest-client
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
|
-
- - "
|
59
|
+
- - ">="
|
66
60
|
- !ruby/object:Gem::Version
|
67
61
|
version: 2.0.2
|
68
62
|
type: :runtime
|
69
63
|
prerelease: false
|
70
64
|
version_requirements: !ruby/object:Gem::Requirement
|
71
65
|
requirements:
|
72
|
-
- - "
|
66
|
+
- - ">="
|
73
67
|
- !ruby/object:Gem::Version
|
74
68
|
version: 2.0.2
|
75
69
|
- !ruby/object:Gem::Dependency
|
@@ -186,7 +180,7 @@ licenses:
|
|
186
180
|
- GPL 3.0
|
187
181
|
metadata:
|
188
182
|
allowed_push_host: https://rubygems.org
|
189
|
-
post_install_message:
|
183
|
+
post_install_message:
|
190
184
|
rdoc_options: []
|
191
185
|
require_paths:
|
192
186
|
- lib
|
@@ -194,15 +188,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
194
188
|
requirements:
|
195
189
|
- - ">="
|
196
190
|
- !ruby/object:Gem::Version
|
197
|
-
version: 2.
|
191
|
+
version: 2.6.0
|
198
192
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
193
|
requirements:
|
200
194
|
- - ">="
|
201
195
|
- !ruby/object:Gem::Version
|
202
196
|
version: '0'
|
203
197
|
requirements: []
|
204
|
-
rubygems_version: 3.0.
|
205
|
-
signing_key:
|
198
|
+
rubygems_version: 3.0.9
|
199
|
+
signing_key:
|
206
200
|
specification_version: 4
|
207
201
|
summary: Rest client wrapper
|
208
202
|
test_files:
|