hubspot-api-client 14.2.0 → 14.4.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 +53 -0
- data/lib/hubspot/discovery/base_api_client.rb +26 -4
- data/lib/hubspot/version.rb +1 -1
- data/spec/discovery/base_api_client_spec.rb +60 -7
- 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: 3229748b2d14e474894aecf5f28d60ae7ace8f5dda38d98daa34a2bbda93e033
|
4
|
+
data.tar.gz: 2867ef54025f5caa340e9ad28e7fafa940cb88bc8b11142b6f75d45df8e6829a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13932717d618997bff59721afe32a3480b30f579d299837d55f925cd1b47f300a70143245d954fadc14b8ca408587051abe355900310d34543e243ea866129a6
|
7
|
+
data.tar.gz: 59711b28a7e2b9fe86fe610434d4bcbb1065ece4812c5448e5856ba53fa77ba275eb6df9bfd24299fae494e98858ddfc94dbd5a4f29c51412be942a86d931d8f
|
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.4.0] - 2022-09-27
|
9
|
+
### Changed
|
10
|
+
|
11
|
+
- handling ApiError by passing a block
|
12
|
+
|
13
|
+
## [14.3.0] - 2022-08-31
|
14
|
+
### Changed
|
15
|
+
|
16
|
+
- using hash instead of model object for Hubspot::Client with body param
|
17
|
+
|
8
18
|
## [14.2.0] - 2022-08-25
|
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.4.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
@@ -116,9 +116,62 @@ object_schema_egg = ::Hubspot::Crm::Schemas::ObjectSchemaEgg.new(
|
|
116
116
|
api_response = api.create(object_schema_egg)
|
117
117
|
```
|
118
118
|
|
119
|
+
for new discovery classes since version 14.3
|
120
|
+
```ruby
|
121
|
+
client = Hubspot::Client.new(access_token: 'your_oauth2_access_token')
|
122
|
+
|
123
|
+
labels = {
|
124
|
+
singular: 'My object',
|
125
|
+
plural: 'My objects'
|
126
|
+
}
|
127
|
+
|
128
|
+
option = {
|
129
|
+
label: 'Option A',
|
130
|
+
value: 'A',
|
131
|
+
description: 'Choice number one',
|
132
|
+
display_order: 1,
|
133
|
+
hidden: false
|
134
|
+
}
|
135
|
+
|
136
|
+
property = {
|
137
|
+
name: 'property001',
|
138
|
+
label: 'My object property',
|
139
|
+
group_name: 'my_object_information',
|
140
|
+
options: [option],
|
141
|
+
display_order: 2,
|
142
|
+
type: 'enumeration',
|
143
|
+
field_type: 'select'
|
144
|
+
}
|
145
|
+
|
146
|
+
body = {
|
147
|
+
labels: labels,
|
148
|
+
required_properties: ['property001'],
|
149
|
+
searchable_properties: [],
|
150
|
+
primary_display_property: 'property001',
|
151
|
+
secondary_display_properties: [],
|
152
|
+
properties: [property],
|
153
|
+
associated_objects: ['CONTACT'],
|
154
|
+
name: 'my_object'
|
155
|
+
}
|
156
|
+
|
157
|
+
api_response = client.crm.schemas.core_api.create(body: body)
|
158
|
+
```
|
159
|
+
|
119
160
|
|
120
161
|
### Error handling
|
121
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
|
+
|
122
175
|
#### You can set number of retry attempts and delay in seconds before retry on specific status code of response.
|
123
176
|
|
124
177
|
Available params:
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require_rel '../helpers/camel_case'
|
2
|
+
|
1
3
|
module Hubspot
|
2
4
|
module Discovery
|
3
5
|
module BaseApiClient
|
@@ -17,7 +19,7 @@ module Hubspot
|
|
17
19
|
end
|
18
20
|
|
19
21
|
def api_client
|
20
|
-
@api_client ||= Kernel.const_get("#{
|
22
|
+
@api_client ||= Kernel.const_get("#{codegen_module_name}::ApiClient").new(config)
|
21
23
|
end
|
22
24
|
|
23
25
|
def api
|
@@ -42,13 +44,28 @@ module Hubspot
|
|
42
44
|
self.class.name.gsub('Discovery::', '')
|
43
45
|
end
|
44
46
|
|
47
|
+
def codegen_module_name
|
48
|
+
codegen_api_class.gsub(/(.*)::.*/, '\1')
|
49
|
+
end
|
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
|
+
|
45
62
|
def define_methods
|
46
63
|
define_api_methods
|
47
64
|
end
|
48
65
|
|
49
66
|
def define_api_methods
|
50
67
|
api_methods.each do |api_method|
|
51
|
-
self.class.define_method(api_method) do |params = {}|
|
68
|
+
self.class.define_method(api_method) do |params = {}, &block|
|
52
69
|
params_with_defaults = params
|
53
70
|
params_with_defaults[:opts] ||= {}
|
54
71
|
params_with_defaults[:opts][:auth_names] = if base_params[:access_token]
|
@@ -65,15 +82,20 @@ module Hubspot
|
|
65
82
|
|
66
83
|
signature_param_names = signature_params.map { |_, param| param }
|
67
84
|
params_with_defaults.each do |param_name, param_value|
|
68
|
-
params_with_defaults[:opts][param_name] = param_value
|
85
|
+
params_with_defaults[:opts][param_name] = param_value if !signature_param_names.include?(param_name) && param_name != :body
|
69
86
|
end
|
70
87
|
|
71
88
|
params_to_pass = signature_params.map do |req, param|
|
89
|
+
model_name = Hubspot::Helpers::CamelCase.new.format(param.to_s)
|
90
|
+
Kernel.const_get("#{codegen_module_name}::#{model_name}").build_from_hash(params_with_defaults[:body])
|
91
|
+
rescue NameError
|
72
92
|
raise "Param #{param} is required for #{api.class}\##{api_method} method" if req == :req && params_with_defaults[param].nil?
|
93
|
+
|
73
94
|
params_with_defaults[param]
|
74
95
|
end
|
75
96
|
|
76
|
-
|
97
|
+
return call_api_with_rescue(api_method, params_to_pass, &block) unless block.nil?
|
98
|
+
call_api(api_method, params_to_pass)
|
77
99
|
end
|
78
100
|
end
|
79
101
|
end
|
data/lib/hubspot/version.rb
CHANGED
@@ -17,11 +17,18 @@ describe 'Hubspot::Discovery::BaseApiClient' do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def update(test_id, simple_public_object_input, opts = {})
|
20
|
-
"updated test_id: #{test_id}, simple_public_object_input: #{simple_public_object_input}, opts: #{opts}"
|
20
|
+
"updated test_id: #{test_id}, name: #{simple_public_object_input.name}, email: #{simple_public_object_input.email}, opts: #{opts}"
|
21
21
|
end
|
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
|
25
32
|
end
|
26
33
|
|
27
34
|
class Hubspot::ApiClient
|
@@ -29,8 +36,28 @@ describe 'Hubspot::Discovery::BaseApiClient' do
|
|
29
36
|
end
|
30
37
|
end
|
31
38
|
|
39
|
+
class Hubspot::ApiError < ::StandardError
|
40
|
+
def message
|
41
|
+
'test error'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class Hubspot::SimplePublicObjectInput
|
46
|
+
attr_reader :name, :email
|
47
|
+
|
48
|
+
def initialize(params)
|
49
|
+
@name = params[:name]
|
50
|
+
@email = params[:email]
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.build_from_hash(params)
|
54
|
+
new(params)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
32
58
|
subject(:client) { Hubspot::Discovery::SomeApiClass.new(access_token: 'test') }
|
33
59
|
let(:api) { client.api }
|
60
|
+
let(:body) { {name: 'test_name', email: 'test_email'} }
|
34
61
|
|
35
62
|
it { is_expected.to respond_to(:get) }
|
36
63
|
it { is_expected.to respond_to(:update) }
|
@@ -51,27 +78,53 @@ describe 'Hubspot::Discovery::BaseApiClient' do
|
|
51
78
|
|
52
79
|
it { is_expected.to eq('got test_id: test_id_value, opts: {:auth_names=>"oauth2", :limit=>5}') }
|
53
80
|
end
|
81
|
+
|
82
|
+
context 'with error handle block' do
|
83
|
+
subject(:get) { client.get(params) { |e| e.message } }
|
84
|
+
let(:params) { {test_id: 'test_id_value', limit: 10} }
|
85
|
+
|
86
|
+
it { is_expected.to eq('got test_id: test_id_value, opts: {:auth_names=>"oauth2", :limit=>10}') }
|
87
|
+
end
|
54
88
|
end
|
55
89
|
|
56
90
|
describe '#update' do
|
57
91
|
subject(:update) { client.update(params) }
|
58
92
|
|
59
93
|
context 'with default params order' do
|
60
|
-
let(:params) { {test_id: 'test_id_value', simple_public_object_input:
|
94
|
+
let(:params) { {test_id: 'test_id_value', simple_public_object_input: Hubspot::SimplePublicObjectInput.new(body), limit: 10} }
|
61
95
|
|
62
|
-
it { is_expected.to eq('updated test_id: test_id_value,
|
96
|
+
it { is_expected.to eq('updated test_id: test_id_value, name: test_name, email: test_email, opts: {:auth_names=>"oauth2", :limit=>10}') }
|
63
97
|
end
|
64
98
|
|
65
99
|
context 'with reversed params order' do
|
66
|
-
let(:params) { {limit: 5, simple_public_object_input:
|
100
|
+
let(:params) { {limit: 5, simple_public_object_input: Hubspot::SimplePublicObjectInput.new(body), test_id: 'test_id_value'} }
|
67
101
|
|
68
|
-
it { is_expected.to eq('updated test_id: test_id_value,
|
102
|
+
it { is_expected.to eq('updated test_id: test_id_value, name: test_name, email: test_email, opts: {:auth_names=>"oauth2", :limit=>5}') }
|
69
103
|
end
|
70
104
|
|
71
105
|
context 'with shuffled params order' do
|
72
|
-
let(:params) { {simple_public_object_input:
|
106
|
+
let(:params) { {simple_public_object_input: Hubspot::SimplePublicObjectInput.new(body), limit: 7, test_id: 'test_id_value'} }
|
73
107
|
|
74
|
-
it { is_expected.to eq('updated test_id: test_id_value,
|
108
|
+
it { is_expected.to eq('updated test_id: test_id_value, name: test_name, email: test_email, opts: {:auth_names=>"oauth2", :limit=>7}') }
|
109
|
+
end
|
110
|
+
|
111
|
+
context 'with body' do
|
112
|
+
let(:params) { {test_id: 'test_id_value', body: body, limit: 10} }
|
113
|
+
|
114
|
+
it { is_expected.to eq('updated test_id: test_id_value, name: test_name, email: test_email, opts: {:auth_names=>"oauth2", :limit=>10}') }
|
75
115
|
end
|
116
|
+
|
117
|
+
context 'with block' do
|
118
|
+
subject(:update) { client.update(params) { |e| e.message } }
|
119
|
+
let(:params) { {test_id: 'test_id_value', body: body, limit: 10} }
|
120
|
+
|
121
|
+
it { is_expected.to eq('updated test_id: test_id_value, name: test_name, email: test_email, opts: {:auth_names=>"oauth2", :limit=>10}') }
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe '#raise_error' do
|
126
|
+
subject(:raise_error) { client.raise_error { |e| e.message } }
|
127
|
+
|
128
|
+
it { is_expected.to eq('test error') }
|
76
129
|
end
|
77
130
|
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.4.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-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typhoeus
|