rest-client-wrapper 3.0.3 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 850533c6b1b1da4dafb1059762820eb8085d43544d934b3a6db1e925228017e8
4
- data.tar.gz: 8cafb6e965ae858ba748d970438faabdc3e92ec7a31c2c76f316f37d018caa4f
3
+ metadata.gz: 8b402585e6034813c0b9d3fa1af05e943ca106f7cdcae0b0f6e205e822250304
4
+ data.tar.gz: 64390499b6848d1dab15c57a723b9b02bded8eedf2b5f3650e8f3f8ed789f3f2
5
5
  SHA512:
6
- metadata.gz: 2201ea8ebc813d0437933446da66d4f735493bb9c2cfb71cfe92c2cb6d4581db4d7ae1f6e4c8f6d31a219f40d06433db4803e1a3dc8b48be297a93e2e9d1115d
7
- data.tar.gz: 971a6eb73f52120ecf6cf194b73e58a690e1449012bd50d450cc9b26952fd2037b2e10a66d2d886a695c57c8ff39ae60ae308f67c05f319649dae6975e8e0968
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(username:, password:)
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(type:, auth_param:)
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(site:, token_url_path:, client_id:, client_secret:)
39
+ def initialize(client_id:, **config)
40
40
  @client_id = client_id
41
- @@api_client[client_id] = { lock: Mutex.new, settings: { site: site, token_url_path: token_url_path, client_secret: client_secret }, access_token: nil, refresh_token: nil }
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
- attr_reader :uri, :headers, :http_method, :payload, :segment_params, :query_params
25
- attr_writer :uri
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(http_method:, uri:, segment_params: {}, payload: {}, query_params: {}, headers: {}) # rubocop:disable Metrics/ParameterLists
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 make_request(http_method:, uri:, payload: {}, query_params: {}, headers: {})
88
- parsed_uri = URI.parse(uri)
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
- uri = parsed_uri.absolute? ? parsed_uri.path : uri
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
- return format("#{ @host }#{ request.uri }", request.segment_params)
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(/\<(.*?)\>/).flatten
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 => e
157
- raise RestClientError.new("Response could not be parsed as JSON", response, e)
159
+ rescue StandardError
160
+ return response.body
158
161
  end
159
162
 
160
163
  def _reset_retries
@@ -18,6 +18,6 @@
18
18
 
19
19
  module RestClientWrapper
20
20
 
21
- VERSION = "3.0.3".freeze
21
+ VERSION = "4.0.0".freeze
22
22
 
23
23
  end
@@ -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.4.0"
33
+ s.required_ruby_version = ">= 2.6.0"
34
34
 
35
- s.add_runtime_dependency "json", "~> 1.8", ">= 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"
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: 3.0.3
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: 2019-10-28 00:00:00.000000000 Z
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.4.0
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.4
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: