ruby_hubspot_api 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/ruby.yml +4 -4
- data/.gitignore +1 -1
- data/CHANGELOG.md +72 -22
- data/Gemfile.lock +1 -1
- data/lib/hubspot/batch.rb +36 -12
- data/lib/hubspot/contact.rb +63 -0
- data/lib/hubspot/form.rb +5 -3
- data/lib/hubspot/paged_batch.rb +2 -1
- data/lib/hubspot/resource.rb +62 -32
- data/lib/hubspot/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6052dfd71294e988924beeab1b89662673ceaf93
|
4
|
+
data.tar.gz: 4b2e295931295d639e473a9b139df03ec7df1554
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: caee0d8350205b6bcf45bb4ed4b5421f3fdaacaff87acfcb52c4845858bbafb664f70acbca1a564a34a99a166fd1072a838702d4bf4044b076cfd0b77e87f6a7
|
7
|
+
data.tar.gz: 28cbb5b1ea5ebc076d7177e8f4ee35f450bbe7fbb33224a31c55f0801fc566b705cf9b65faf95453b91154675139fb33cfce557ea74e06afd001a09f710190bf
|
data/.github/workflows/ruby.yml
CHANGED
@@ -41,7 +41,7 @@ jobs:
|
|
41
41
|
env:
|
42
42
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
43
43
|
|
44
|
-
- name: Upload coverage to Codacy
|
45
|
-
|
46
|
-
|
47
|
-
|
44
|
+
# - name: Upload coverage to Codacy
|
45
|
+
# run: bash <(curl -Ls https://coverage.codacy.com/get.sh)
|
46
|
+
# env:
|
47
|
+
# CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,61 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
## v0.3.0
|
3
|
+
|
4
|
+
- Clarify usage
|
5
|
+
- More usage clarification
|
6
|
+
- Create ruby.yml
|
7
|
+
- fix the github workflow
|
8
|
+
- fix the github workflow properly
|
9
|
+
- add plaatforms to Gemfile.lock
|
10
|
+
- add ruby 2.5 and reduce log output
|
11
|
+
- try calling rspec directly
|
12
|
+
- Use ERB in VCR tests so as to be independent of the env vars
|
13
|
+
- ignore ruby version file
|
14
|
+
- test on ruby 3.0 too
|
15
|
+
- determine if a Hubspot property is read_only (or by negation updatable)
|
16
|
+
- adding codecov
|
17
|
+
- Using earlier bundler
|
18
|
+
- Adding lcov format
|
19
|
+
- Add read-only properties to resource class
|
20
|
+
- Add property check to the contact spec
|
21
|
+
- Only apply lcov formatter if running on github
|
22
|
+
- try to upload the coverage results to codacy too
|
23
|
+
- Adding Codacy badge
|
24
|
+
- Ensure we always apply the right log_level
|
25
|
+
- Tidy up documentation of resource
|
26
|
+
- Yep. Back ported to 2.4
|
27
|
+
- adjust some rubocop settings
|
28
|
+
- Tidy up somer doc comments
|
29
|
+
- Add some handling of required properties
|
30
|
+
- Update user model to force specific properties to be retrieved
|
31
|
+
- Improve logic of resource matching
|
32
|
+
- Adds :sparkle: attributes method to a resource
|
33
|
+
- Tidy comments
|
34
|
+
- Update the hierarchy to allow more flexibility
|
35
|
+
- Fix find resources
|
36
|
+
- Clear up processing results
|
37
|
+
- Update batch spec
|
38
|
+
- Bump the version
|
39
|
+
- Adds validation for resource matcher
|
40
|
+
- Dynamically add a method to batch to allow "resources" to be referred to as the resource_name
|
41
|
+
- Ignore gem files
|
42
|
+
- Drop cadacy for now
|
43
|
+
- Update batch spec to check resource_matcher works
|
44
|
+
- Ensure properties are passed as named argument
|
45
|
+
- No cov for inspect
|
46
|
+
- Allow ERB in json fixtures
|
47
|
+
- Contact find_by_token spec
|
48
|
+
- find_by_token method - uses v1 API
|
49
|
+
- Tests the method missing setter for resource
|
50
|
+
- Sanitize web mock output
|
51
|
+
- Finish specs
|
52
|
+
- check the env vars before sanitising
|
53
|
+
- make erb explicitly determined by the file exension (.json.erb)
|
54
|
+
- use safe navigation for extracting id
|
55
|
+
- bump version
|
56
|
+
- update gem version in lock file
|
57
|
+
|
58
|
+
## v0.2.0
|
2
59
|
|
3
60
|
- Get the development dependencies right!
|
4
61
|
- Bump the version again
|
@@ -21,11 +78,23 @@
|
|
21
78
|
- Simplify mocked responses in batch spec
|
22
79
|
- Adds PagedBatch as pager for batch/read request
|
23
80
|
- Update the Readme to add Batch operations
|
24
|
-
-
|
81
|
+
- bump version
|
25
82
|
|
26
83
|
## v0.1.2
|
27
84
|
|
28
|
-
-
|
85
|
+
- Fix the Readme
|
86
|
+
- Sure the search param is values where passing an array
|
87
|
+
- update changelog and Gemfile.lock
|
88
|
+
- bump version
|
89
|
+
|
90
|
+
## v0.1.1
|
91
|
+
|
92
|
+
- adds the version numbers to the gemspec
|
93
|
+
- Fix dependencies
|
94
|
+
- bump version
|
95
|
+
|
96
|
+
## v0.1.0
|
97
|
+
|
29
98
|
- Setup the configuration block
|
30
99
|
- Adds spec for config
|
31
100
|
- Set the auth headers when access_token configured
|
@@ -67,23 +136,4 @@
|
|
67
136
|
- Flatten the properties array into a comma separated list
|
68
137
|
- Improve the intialiser
|
69
138
|
- Update the changeling and link in gem spec
|
70
|
-
- adds the version numbers to the gemspec
|
71
|
-
- Fix dependencies
|
72
|
-
- bump version
|
73
|
-
- Fix the Readme
|
74
|
-
- Sure the search param is values where passing an array
|
75
|
-
- update changelog and Gemfile.lock
|
76
|
-
- bump version
|
77
|
-
|
78
|
-
## v0.1.1
|
79
|
-
|
80
|
-
- Fix the Readme
|
81
|
-
- Sure the search param is values where passing an array
|
82
|
-
- update changelog and Gemfile.lock
|
83
|
-
- bump version
|
84
139
|
|
85
|
-
## v0.1.0
|
86
|
-
|
87
|
-
- adds the version numbers to the gemspec
|
88
|
-
- Fix dependencies
|
89
|
-
- bump version
|
data/Gemfile.lock
CHANGED
data/lib/hubspot/batch.rb
CHANGED
@@ -31,6 +31,7 @@ module Hubspot
|
|
31
31
|
CONTACT_LIMIT = 10
|
32
32
|
DEFAULT_LIMIT = 100
|
33
33
|
|
34
|
+
# :nocov:
|
34
35
|
def inspect
|
35
36
|
"#<#{self.class.name} " \
|
36
37
|
"@resource_count=#{@resources.size}, " \
|
@@ -38,16 +39,11 @@ module Hubspot
|
|
38
39
|
"@resource_type=#{@resources.first&.resource_name}, " \
|
39
40
|
"@responses_count=#{@responses.size}>"
|
40
41
|
end
|
42
|
+
# :nocov:
|
41
43
|
|
42
44
|
# rubocop:disable Lint/MissingSuper
|
43
45
|
def initialize(resources = [], id_property: 'id', resource_matcher: nil)
|
44
|
-
|
45
|
-
unless resource_matcher.is_a?(Proc) && resource_matcher.arity == 2
|
46
|
-
raise ArgumentError, 'resource_matcher must be a proc that accepts exactly 2 arguments'
|
47
|
-
end
|
48
|
-
|
49
|
-
@resource_matcher = resource_matcher
|
50
|
-
end
|
46
|
+
validate_resource_matcher(resource_matcher)
|
51
47
|
|
52
48
|
@resources = []
|
53
49
|
@id_property = id_property # Set id_property for the batch (default: 'id')
|
@@ -67,11 +63,23 @@ module Hubspot
|
|
67
63
|
end
|
68
64
|
|
69
65
|
# Upsert method that calls save with upsert action
|
70
|
-
def upsert
|
66
|
+
def upsert(resource_matcher: nil)
|
67
|
+
validate_resource_matcher(resource_matcher)
|
68
|
+
|
71
69
|
validate_upsert_conditions
|
72
70
|
save(action: 'upsert')
|
73
71
|
end
|
74
72
|
|
73
|
+
def validate_resource_matcher(resource_matcher)
|
74
|
+
return if resource_matcher.blank?
|
75
|
+
|
76
|
+
unless resource_matcher.is_a?(Proc) && resource_matcher.arity == 2
|
77
|
+
raise ArgumentError, 'resource_matcher must be a proc that accepts exactly 2 arguments'
|
78
|
+
end
|
79
|
+
|
80
|
+
@resource_matcher = resource_matcher
|
81
|
+
end
|
82
|
+
|
75
83
|
# Archive method
|
76
84
|
def archive
|
77
85
|
save(action: 'archive')
|
@@ -93,15 +101,29 @@ module Hubspot
|
|
93
101
|
end
|
94
102
|
|
95
103
|
def add_resource(resource)
|
96
|
-
if @resources.any?
|
97
|
-
|
104
|
+
if @resources.any?
|
105
|
+
if @resources.first.resource_name != resource.resource_name
|
106
|
+
raise ArgumentError, 'All resources in a batch must be of the same type'
|
107
|
+
end
|
108
|
+
else
|
109
|
+
add_resource_method(resource.resource_name)
|
98
110
|
end
|
99
111
|
|
100
112
|
@resources << resource
|
101
113
|
end
|
102
114
|
|
115
|
+
def any_changes?
|
116
|
+
@resources.any?(&:changes?)
|
117
|
+
end
|
118
|
+
|
103
119
|
private
|
104
120
|
|
121
|
+
def add_resource_method(resource_name)
|
122
|
+
self.class.class_eval do
|
123
|
+
alias_method resource_name.to_sym, :resources
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
105
127
|
# rubocop:disable Metrics/MethodLength
|
106
128
|
def save(action: 'update')
|
107
129
|
@action = action
|
@@ -280,13 +302,15 @@ module Hubspot
|
|
280
302
|
end
|
281
303
|
|
282
304
|
class << self
|
283
|
-
def read(object_class, object_ids = [], id_property: 'id')
|
305
|
+
def read(object_class, object_ids = [], properties: [], id_property: 'id')
|
284
306
|
unless object_class < Hubspot::Resource
|
285
307
|
raise ArgumentError, 'Must be a valid Hubspot resource class'
|
286
308
|
end
|
287
309
|
|
288
310
|
# fetch all the matching resources with paging handled
|
289
|
-
resources = object_class.batch_read(object_ids,
|
311
|
+
resources = object_class.batch_read(object_ids,
|
312
|
+
properties: properties,
|
313
|
+
id_property: id_property).all
|
290
314
|
|
291
315
|
# return instance of Hubspot::Batch with the resources set
|
292
316
|
new(resources, id_property: id_property)
|
data/lib/hubspot/contact.rb
CHANGED
@@ -2,5 +2,68 @@
|
|
2
2
|
|
3
3
|
module Hubspot
|
4
4
|
class Contact < Resource
|
5
|
+
# def required_properties
|
6
|
+
# %w[email firstname lastname]
|
7
|
+
# end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def metadata_field?(key)
|
12
|
+
METADATA_FIELDS.include?(key) || key.start_with?('hs_')
|
13
|
+
end
|
14
|
+
|
15
|
+
class << self
|
16
|
+
# Finds a contact by the hubspotutk cookie
|
17
|
+
#
|
18
|
+
# token - the hubspot tracking token (stored from the hubspotutk cookie value)
|
19
|
+
# properties: - Optional list of properties to return.
|
20
|
+
# Note: If properties are specified 2 calls to the api will be made because
|
21
|
+
# at this time you can only search by the token using the v1 api
|
22
|
+
# from which we
|
23
|
+
#
|
24
|
+
# Example:
|
25
|
+
# properties = %w[firstname lastname email last_contacted]
|
26
|
+
# contact = Hubspot::Contact.find_by_token(hubspotutk_cookie_value, properties)
|
27
|
+
#
|
28
|
+
# Returns An instance of the resource.
|
29
|
+
def find_by_token(token, properties: [])
|
30
|
+
all_properties = build_property_list(properties)
|
31
|
+
query_props = all_properties.map { |prop| "property=#{prop}" }
|
32
|
+
query_string = query_props.concat(['propertyMode=value_only']).join('&')
|
33
|
+
|
34
|
+
# Make the original API request, manually appending the query string
|
35
|
+
response = get("/contacts/v1/contact/utk/#{token}/profile?#{query_string}")
|
36
|
+
|
37
|
+
# Only modify the response if it's successful (status 200 OK)
|
38
|
+
if response.success?
|
39
|
+
# Convert the v1 response body (parsed_response) to a v3 structure
|
40
|
+
v3_response_hash = convert_v1_response(response.parsed_response, all_properties)
|
41
|
+
|
42
|
+
# Modify the existing response object by updating its `parsed_response`
|
43
|
+
response.instance_variable_set(:@parsed_response, v3_response_hash)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Pass the (potentially modified) HTTParty response to the next step
|
47
|
+
instantiate_from_response(response)
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def convert_v1_response(v1_response, property_list)
|
53
|
+
# Extract the `vid` as `id`
|
54
|
+
v3_response = {
|
55
|
+
'id' => v1_response['vid']
|
56
|
+
}
|
57
|
+
|
58
|
+
properties = property_list.each_with_object({}) do |property, hash|
|
59
|
+
hash[property] = v1_response.dig('properties', property, 'value')
|
60
|
+
end
|
61
|
+
|
62
|
+
# Build the v3 structure
|
63
|
+
v3_response['properties'] = properties
|
64
|
+
|
65
|
+
v3_response
|
66
|
+
end
|
67
|
+
end
|
5
68
|
end
|
6
69
|
end
|
data/lib/hubspot/form.rb
CHANGED
@@ -4,11 +4,13 @@ module Hubspot
|
|
4
4
|
class Form < Resource
|
5
5
|
METADATA_FIELDS = %w[createdAt updatedAt archived].freeze
|
6
6
|
|
7
|
+
# :nocov:
|
7
8
|
def inspect
|
8
9
|
"#<#{self.class.name} " \
|
9
10
|
"@name=#{name}, " \
|
10
11
|
"@fieldGroups=#{respond_to?('fieldGroups') ? fieldGroups.size : '-'}>"
|
11
12
|
end
|
13
|
+
# :nocov:
|
12
14
|
|
13
15
|
class << self
|
14
16
|
def api_root
|
@@ -18,9 +20,9 @@ module Hubspot
|
|
18
20
|
|
19
21
|
private
|
20
22
|
|
21
|
-
#
|
22
|
-
def extract_id(
|
23
|
-
|
23
|
+
# dont convert (from string)
|
24
|
+
def extract_id(id)
|
25
|
+
id
|
24
26
|
end
|
25
27
|
end
|
26
28
|
end
|
data/lib/hubspot/paged_batch.rb
CHANGED
@@ -10,7 +10,7 @@ module Hubspot
|
|
10
10
|
|
11
11
|
MAX_LIMIT = 100 # HubSpot max items per page
|
12
12
|
|
13
|
-
#
|
13
|
+
# :nocov:
|
14
14
|
def inspect
|
15
15
|
"#<#{self.class.name} " \
|
16
16
|
"@url=#{@url.inspect}, " \
|
@@ -18,6 +18,7 @@ module Hubspot
|
|
18
18
|
"@resource_class=#{@resource_class.inspect}, " \
|
19
19
|
"@object_ids_count=#{@object_ids.size}>"
|
20
20
|
end
|
21
|
+
# :nocov:
|
21
22
|
|
22
23
|
# rubocop:disable Lint/MissingSuper
|
23
24
|
def initialize(url:, params: {}, resource_class: nil, object_ids: [])
|
data/lib/hubspot/resource.rb
CHANGED
@@ -45,12 +45,14 @@ module Hubspot
|
|
45
45
|
# Find a resource by ID and return an instance of the class
|
46
46
|
#
|
47
47
|
# id - [Integer] The ID (or hs_object_id) of the resource to fetch.
|
48
|
+
# properties - an array of property names to fetch in the result
|
48
49
|
#
|
49
50
|
# Example:
|
50
51
|
# contact = Hubspot::Contact.find(1)
|
52
|
+
# contact = Hubspot::Contact.find(1, properties: %w[email firstname lastname custom_field])
|
51
53
|
#
|
52
54
|
# Returns An instance of the resource.
|
53
|
-
def find(id, properties
|
55
|
+
def find(id, properties: nil)
|
54
56
|
all_properties = build_property_list(properties)
|
55
57
|
if all_properties.is_a?(Array) && !all_properties.empty?
|
56
58
|
params = { query: { properties: all_properties } }
|
@@ -181,8 +183,8 @@ module Hubspot
|
|
181
183
|
# Hubspot::Contact.batch_read_all(hubspot_contact_ids)
|
182
184
|
#
|
183
185
|
# Returns [Hubspot::Batch] A batch of resources that can be operated on further
|
184
|
-
def batch_read_all(object_ids = [], id_property: 'id')
|
185
|
-
Hubspot::Batch.read(self, object_ids, id_property: id_property)
|
186
|
+
def batch_read_all(object_ids = [], properties: [], id_property: 'id')
|
187
|
+
Hubspot::Batch.read(self, object_ids, properties: properties, id_property: id_property)
|
186
188
|
end
|
187
189
|
|
188
190
|
# Retrieve the complete list of properties for this resource class
|
@@ -392,8 +394,13 @@ module Hubspot
|
|
392
394
|
|
393
395
|
# Public: Initialize a resouce
|
394
396
|
#
|
395
|
-
# data - [2D Hash, nested Hash] data to initialise
|
396
|
-
# -
|
397
|
+
# data - [2D Hash, nested Hash] data to initialise:
|
398
|
+
# - The response from the api will be of the form:
|
399
|
+
# { id: <hs_object_id>, properties: { "email": "john@example.org" ... }, ... }
|
400
|
+
#
|
401
|
+
# - A Simple 2D Hash, key value pairs in the form:
|
402
|
+
# { email: 'john@example.org', firstname: 'John', lastname: 'Smith' }
|
403
|
+
#
|
397
404
|
# - A structured hash consisting of { id: <hs_object_id>, properties: {}, ... }
|
398
405
|
# This is the same structure as per the API, and can be rebuilt if you store the id
|
399
406
|
# of the object against your own data
|
@@ -409,7 +416,7 @@ module Hubspot
|
|
409
416
|
# existing_contact = Hubspot::Contact.new(id: hubspot_id, properties: contact.to_hubspot)
|
410
417
|
def initialize(data = {})
|
411
418
|
data.transform_keys!(&:to_s)
|
412
|
-
@id = extract_id(data)
|
419
|
+
@id = extract_id(data.delete('id'))
|
413
420
|
@properties = {}
|
414
421
|
@metadata = {}
|
415
422
|
if @id
|
@@ -520,15 +527,8 @@ module Hubspot
|
|
520
527
|
if method_name.end_with?('=')
|
521
528
|
attribute = method_name.chomp('=')
|
522
529
|
new_value = args.first
|
523
|
-
|
524
|
-
#
|
525
|
-
if @properties[attribute] != new_value
|
526
|
-
@changes[attribute] = new_value
|
527
|
-
else
|
528
|
-
@changes.delete(attribute) # Remove from changes if it reverts to the original value
|
529
|
-
end
|
530
|
-
|
531
|
-
return new_value
|
530
|
+
add_accessors attribute
|
531
|
+
return send("#{attribute}=", new_value)
|
532
532
|
# Handle getters
|
533
533
|
else
|
534
534
|
return @changes[method_name] if @changes.key?(method_name)
|
@@ -547,35 +547,70 @@ module Hubspot
|
|
547
547
|
@properties.key?(property_name) || @changes.key?(property_name) || super
|
548
548
|
end
|
549
549
|
|
550
|
-
private
|
551
|
-
|
552
|
-
# Extract ID from data and convert to integer
|
553
|
-
def extract_id(data)
|
554
|
-
data['id'] ? data['id'].to_i : nil
|
555
|
-
end
|
556
|
-
|
557
550
|
# Initialize from API response, separating metadata from properties
|
558
551
|
def initialize_from_api(data)
|
552
|
+
@changes = data.delete('changes')&.transform_keys!(&:to_s) || {}
|
553
|
+
|
559
554
|
if data['properties']
|
560
555
|
@metadata = data.reject { |key, _v| key == 'properties' }
|
561
556
|
handle_properties(data['properties'])
|
562
557
|
else
|
563
558
|
handle_properties(data)
|
564
559
|
end
|
560
|
+
end
|
565
561
|
|
566
|
-
|
562
|
+
private
|
563
|
+
|
564
|
+
# Extract ID from data and convert to integer
|
565
|
+
def extract_id(id)
|
566
|
+
id&.to_i
|
567
567
|
end
|
568
568
|
|
569
569
|
def handle_properties(properties_data)
|
570
|
-
properties_data.each do |
|
571
|
-
if
|
572
|
-
@metadata[
|
570
|
+
properties_data.each do |attribute, value|
|
571
|
+
if metadata_field?(attribute)
|
572
|
+
@metadata[attribute.to_s] = value
|
573
573
|
else
|
574
|
-
|
574
|
+
add_accessors attribute.to_s
|
575
|
+
@properties[attribute.to_s] = value
|
575
576
|
end
|
576
577
|
end
|
577
578
|
end
|
578
579
|
|
580
|
+
def add_accessors(attribute)
|
581
|
+
add_accessors_setter(attribute)
|
582
|
+
add_accessors_getter(attribute)
|
583
|
+
end
|
584
|
+
|
585
|
+
def add_accessors_setter(attribute)
|
586
|
+
# Define the setter method
|
587
|
+
define_singleton_method("#{attribute}=") do |new_value|
|
588
|
+
# Track changes only if the value has actually changed
|
589
|
+
if @properties[attribute] != new_value
|
590
|
+
@changes[attribute] = new_value
|
591
|
+
else
|
592
|
+
@changes.delete(attribute) # Remove from changes if it reverts to the original value
|
593
|
+
end
|
594
|
+
|
595
|
+
new_value
|
596
|
+
end
|
597
|
+
end
|
598
|
+
|
599
|
+
def add_accessors_getter(attribute)
|
600
|
+
# Define the getter method
|
601
|
+
define_singleton_method(attribute) do
|
602
|
+
# Return from changes if available, else return from properties
|
603
|
+
return @changes[attribute] if @changes.key?(attribute)
|
604
|
+
|
605
|
+
@properties[attribute] if @properties.key?(attribute)
|
606
|
+
end
|
607
|
+
end
|
608
|
+
|
609
|
+
# allows overwriting in other resource classes
|
610
|
+
def metadata_field?(key)
|
611
|
+
METADATA_FIELDS.include?(key)
|
612
|
+
end
|
613
|
+
|
579
614
|
# Initialize a new object (no API response)
|
580
615
|
def initialize_new_object(data)
|
581
616
|
@properties = {}
|
@@ -583,11 +618,6 @@ module Hubspot
|
|
583
618
|
@metadata = {}
|
584
619
|
end
|
585
620
|
|
586
|
-
# Extract metadata from data, excluding properties
|
587
|
-
def extract_metadata(data)
|
588
|
-
data.reject { |key, _| key == 'properties' }
|
589
|
-
end
|
590
|
-
|
591
621
|
# Create a new resource
|
592
622
|
def create_new
|
593
623
|
created_resource = self.class.create(@changes)
|
data/lib/hubspot/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_hubspot_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Brook
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-10-
|
11
|
+
date: 2024-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -254,7 +254,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
254
254
|
- !ruby/object:Gem::Version
|
255
255
|
version: '0'
|
256
256
|
requirements: []
|
257
|
-
|
257
|
+
rubyforge_project:
|
258
|
+
rubygems_version: 2.6.14
|
258
259
|
signing_key:
|
259
260
|
specification_version: 4
|
260
261
|
summary: ruby_hubspot_api is an ORM-like wrapper for the Hubspot API
|