hubspot-api-client 14.3.0 → 14.5.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/CHANGELOG.md +10 -0
- data/Gemfile.lock +3 -3
- data/README.md +34 -0
- data/lib/hubspot/discovery/base_api_client.rb +42 -3
- data/lib/hubspot/version.rb +1 -1
- data/spec/discovery/base_api_client_spec.rb +69 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9767c7c7c1e949bd93690f2c111d3e47141be1ca597f99091402eba1ca3f968e
|
4
|
+
data.tar.gz: f435e7e0e1a4bff0d0f9e57a1dc284a9a48293e036bd8c1cfbf0e1b408825f9a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b383cf4b93fb791e6869120c1b4c7952a2b6242a355c4d958c1de1523ccee00aeac3210c0949ea7e22065f2ff2c67304a31eaeb4c788dcbd0d5e95529f19755a
|
7
|
+
data.tar.gz: 344aafe31b45ff09eec055504ab455a0548ed30c29bd51dba84ab33918c68390e4f442e4302eef20075cc6b1c802e846a7dc5008c266bfbdf7f84f4c4243ba53
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
7
|
|
8
|
+
## [14.5.0] - 2022-09-30
|
9
|
+
### Changed
|
10
|
+
|
11
|
+
- handling ApiError with retries
|
12
|
+
|
13
|
+
## [14.4.0] - 2022-09-27
|
14
|
+
### Changed
|
15
|
+
|
16
|
+
- handling ApiError by passing a block
|
17
|
+
|
8
18
|
## [14.3.0] - 2022-08-31
|
9
19
|
### Changed
|
10
20
|
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
hubspot-api-client (14.
|
4
|
+
hubspot-api-client (14.5.0)
|
5
5
|
json (~> 2.1, >= 2.1.0)
|
6
6
|
require_all (~> 3.0.0)
|
7
7
|
typhoeus (~> 1.4.0)
|
@@ -41,13 +41,13 @@ GEM
|
|
41
41
|
rspec-mocks (~> 3.11.0)
|
42
42
|
rspec-core (3.11.0)
|
43
43
|
rspec-support (~> 3.11.0)
|
44
|
-
rspec-expectations (3.11.
|
44
|
+
rspec-expectations (3.11.1)
|
45
45
|
diff-lcs (>= 1.2.0, < 2.0)
|
46
46
|
rspec-support (~> 3.11.0)
|
47
47
|
rspec-mocks (3.11.1)
|
48
48
|
diff-lcs (>= 1.2.0, < 2.0)
|
49
49
|
rspec-support (~> 3.11.0)
|
50
|
-
rspec-support (3.11.
|
50
|
+
rspec-support (3.11.1)
|
51
51
|
typhoeus (1.4.0)
|
52
52
|
ethon (>= 0.9.0)
|
53
53
|
vcr (3.0.3)
|
data/README.md
CHANGED
@@ -160,6 +160,18 @@ api_response = client.crm.schemas.core_api.create(body: body)
|
|
160
160
|
|
161
161
|
### Error handling
|
162
162
|
|
163
|
+
for new discovery classes since version 14.4
|
164
|
+
|
165
|
+
#### You can rescue an ApiError by passing a block to the method
|
166
|
+
|
167
|
+
```ruby
|
168
|
+
require 'hubspot-api-client'
|
169
|
+
|
170
|
+
client = Hubspot::Client.new(access_token: 'your_access_token')
|
171
|
+
|
172
|
+
contacts = client.crm.contacts.basic_api.get_page { |error| error.message }
|
173
|
+
```
|
174
|
+
|
163
175
|
#### You can set number of retry attempts and delay in seconds before retry on specific status code of response.
|
164
176
|
|
165
177
|
Available params:
|
@@ -184,6 +196,28 @@ api_client = ::Hubspot::Crm::Companies::ApiClient.new(config)
|
|
184
196
|
basic_api = ::Hubspot::Crm::Companies::BasicApi.new(api_client)
|
185
197
|
```
|
186
198
|
|
199
|
+
for new discovery classes since version 14.5
|
200
|
+
|
201
|
+
Available params:
|
202
|
+
- max_retries (maximum number of retries)
|
203
|
+
- seconds_delay (pause in seconds between retries)
|
204
|
+
- passing a block (block that handles errors occured)
|
205
|
+
|
206
|
+
|
207
|
+
```ruby
|
208
|
+
require 'hubspot-api-client'
|
209
|
+
|
210
|
+
# Set handlers of statuses you want to handle
|
211
|
+
retry_config = {
|
212
|
+
500..530 => { max_retries: 2, seconds_delay: 2 },
|
213
|
+
400 => { max_retries: 3, seconds_delay: 3 }
|
214
|
+
}
|
215
|
+
|
216
|
+
client = Hubspot::Client.new(access_token: 'your_access_token')
|
217
|
+
|
218
|
+
contacts = client.crm.contacts.basic_api.get_page(retry: retry_config) { |error| error.code }
|
219
|
+
```
|
220
|
+
|
187
221
|
### Sample apps
|
188
222
|
|
189
223
|
Please, take a look at our [Sample apps](https://github.com/HubSpot/sample-apps-list)
|
@@ -48,13 +48,50 @@ module Hubspot
|
|
48
48
|
codegen_api_class.gsub(/(.*)::.*/, '\1')
|
49
49
|
end
|
50
50
|
|
51
|
+
def call_api(api_method, params_to_pass)
|
52
|
+
api.public_send(api_method, *params_to_pass)
|
53
|
+
end
|
54
|
+
|
55
|
+
def call_api_with_rescue(api_method, params_to_pass)
|
56
|
+
error = Kernel.const_get("#{codegen_module_name}::ApiError")
|
57
|
+
call_api(api_method, params_to_pass)
|
58
|
+
rescue error => e
|
59
|
+
yield(e)
|
60
|
+
end
|
61
|
+
|
62
|
+
def call_api_with_retry(api_method, params_to_pass, retry_config, &block)
|
63
|
+
call_api_with_rescue(api_method, params_to_pass) do |error|
|
64
|
+
opts = retry_config.detect{ |k,v| k === error.code }&.last
|
65
|
+
retries = opts&.dig(:max_retries) || 5
|
66
|
+
|
67
|
+
block.call(error) unless block.nil?
|
68
|
+
|
69
|
+
response = error
|
70
|
+
|
71
|
+
while retries > 0 && opts
|
72
|
+
sleep opts[:seconds_delay] if opts[:seconds_delay]
|
73
|
+
response = call_api_with_rescue(api_method, params_to_pass) do |e|
|
74
|
+
block.call(e) unless block.nil?
|
75
|
+
e
|
76
|
+
end
|
77
|
+
|
78
|
+
return response unless response.respond_to?(:code)
|
79
|
+
|
80
|
+
opts = retry_config.detect{ |k,v| k === response.code }&.last
|
81
|
+
retries -= 1
|
82
|
+
end
|
83
|
+
|
84
|
+
response
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
51
88
|
def define_methods
|
52
89
|
define_api_methods
|
53
90
|
end
|
54
91
|
|
55
92
|
def define_api_methods
|
56
93
|
api_methods.each do |api_method|
|
57
|
-
self.class.define_method(api_method) do |params = {}|
|
94
|
+
self.class.define_method(api_method) do |params = {}, &block|
|
58
95
|
params_with_defaults = params
|
59
96
|
params_with_defaults[:opts] ||= {}
|
60
97
|
params_with_defaults[:opts][:auth_names] = if base_params[:access_token]
|
@@ -71,7 +108,7 @@ module Hubspot
|
|
71
108
|
|
72
109
|
signature_param_names = signature_params.map { |_, param| param }
|
73
110
|
params_with_defaults.each do |param_name, param_value|
|
74
|
-
params_with_defaults[:opts][param_name] = param_value if !signature_param_names.include?(param_name) && param_name != :body
|
111
|
+
params_with_defaults[:opts][param_name] = param_value if !signature_param_names.include?(param_name) && param_name != :body && param_name != :retry
|
75
112
|
end
|
76
113
|
|
77
114
|
params_to_pass = signature_params.map do |req, param|
|
@@ -83,7 +120,9 @@ module Hubspot
|
|
83
120
|
params_with_defaults[param]
|
84
121
|
end
|
85
122
|
|
86
|
-
|
123
|
+
return call_api_with_retry(api_method, params_to_pass, params[:retry], &block) unless params[:retry].nil?
|
124
|
+
return call_api_with_rescue(api_method, params_to_pass, &block) unless block.nil?
|
125
|
+
call_api(api_method, params_to_pass)
|
87
126
|
end
|
88
127
|
end
|
89
128
|
end
|
data/lib/hubspot/version.rb
CHANGED
@@ -22,6 +22,23 @@ describe 'Hubspot::Discovery::BaseApiClient' do
|
|
22
22
|
|
23
23
|
def update_with_http_info
|
24
24
|
end
|
25
|
+
|
26
|
+
def raise_error
|
27
|
+
raise Hubspot::ApiError
|
28
|
+
end
|
29
|
+
|
30
|
+
def raise_error_with_http_info
|
31
|
+
end
|
32
|
+
|
33
|
+
def raise_error_on_third_call
|
34
|
+
@calls_count ||= 0
|
35
|
+
@calls_count += 1
|
36
|
+
raise Hubspot::ApiError if @calls_count < 3
|
37
|
+
'ok'
|
38
|
+
end
|
39
|
+
|
40
|
+
def raise_error_on_third_call_with_http_info
|
41
|
+
end
|
25
42
|
end
|
26
43
|
|
27
44
|
class Hubspot::ApiClient
|
@@ -29,6 +46,16 @@ describe 'Hubspot::Discovery::BaseApiClient' do
|
|
29
46
|
end
|
30
47
|
end
|
31
48
|
|
49
|
+
class Hubspot::ApiError < ::StandardError
|
50
|
+
def message
|
51
|
+
'test error'
|
52
|
+
end
|
53
|
+
|
54
|
+
def code
|
55
|
+
429
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
32
59
|
class Hubspot::SimplePublicObjectInput
|
33
60
|
attr_reader :name, :email
|
34
61
|
|
@@ -65,6 +92,13 @@ describe 'Hubspot::Discovery::BaseApiClient' do
|
|
65
92
|
|
66
93
|
it { is_expected.to eq('got test_id: test_id_value, opts: {:auth_names=>"oauth2", :limit=>5}') }
|
67
94
|
end
|
95
|
+
|
96
|
+
context 'with error handle block' do
|
97
|
+
subject(:get) { client.get(params) { |e| e.message } }
|
98
|
+
let(:params) { {test_id: 'test_id_value', limit: 10} }
|
99
|
+
|
100
|
+
it { is_expected.to eq('got test_id: test_id_value, opts: {:auth_names=>"oauth2", :limit=>10}') }
|
101
|
+
end
|
68
102
|
end
|
69
103
|
|
70
104
|
describe '#update' do
|
@@ -93,5 +127,40 @@ describe 'Hubspot::Discovery::BaseApiClient' do
|
|
93
127
|
|
94
128
|
it { is_expected.to eq('updated test_id: test_id_value, name: test_name, email: test_email, opts: {:auth_names=>"oauth2", :limit=>10}') }
|
95
129
|
end
|
130
|
+
|
131
|
+
context 'with block' do
|
132
|
+
subject(:update) { client.update(params) { |e| e.message } }
|
133
|
+
let(:params) { {test_id: 'test_id_value', body: body, limit: 10} }
|
134
|
+
|
135
|
+
it { is_expected.to eq('updated test_id: test_id_value, name: test_name, email: test_email, opts: {:auth_names=>"oauth2", :limit=>10}') }
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
describe '#raise_error' do
|
140
|
+
subject(:raise_error) { client.raise_error { |e| e.message } }
|
141
|
+
|
142
|
+
it { is_expected.to eq('test error') }
|
143
|
+
end
|
144
|
+
|
145
|
+
describe '#raise_error_on_third_call' do
|
146
|
+
subject(:raise_error_on_third_call) { client.raise_error_on_third_call(retry: retry_config) }
|
147
|
+
|
148
|
+
context 'with 2 retries' do
|
149
|
+
let(:retry_config) { {429 => { max_retries: 2 }} }
|
150
|
+
|
151
|
+
it { is_expected.to eq('ok') }
|
152
|
+
|
153
|
+
context 'with range config' do
|
154
|
+
let(:retry_config) { {429..442 => { max_retries: 2 }} }
|
155
|
+
|
156
|
+
it { is_expected.to eq('ok') }
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
context 'with 1 retry' do
|
161
|
+
let(:retry_config) { {429 => { max_retries: 1 }} }
|
162
|
+
|
163
|
+
it { is_expected.to have_attributes(code: 429, message: 'test error') }
|
164
|
+
end
|
96
165
|
end
|
97
166
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hubspot-api-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 14.
|
4
|
+
version: 14.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- HubSpot
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typhoeus
|