ruby_hubspot_api 0.2.1 → 0.2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Gemfile.lock +12 -16
- data/lib/hubspot/api_client.rb +2 -0
- data/lib/hubspot/config.rb +5 -5
- data/lib/hubspot/resource.rb +9 -213
- data/lib/hubspot/version.rb +1 -1
- data/lib/hubspot.rb +1 -0
- data/lib/support/patches.rb +27 -0
- data/ruby_hubspot_api.gemspec +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: ae46636189d9ad859e0e342eed9b752ccbd64c06
|
4
|
+
data.tar.gz: 3cf0de6c387b00810af776e6b4ff89bcdcc00230
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebdaa4d4f2bb6f1f7b6c9fede064598daf78edcf2204322819d2a13e7dbd504ff1792a7afd75037a4eae24171cd9b52d962dc6e2eb7439fe5bb9a84ad6733a22
|
7
|
+
data.tar.gz: fa2dd031fa494b3bd8c68880d68aa19603035bbf32395a7e3650eefa8906507d6e0790020e032002612d59c516c5eb97b371b69f2f1ff563a4819006aa5d6180
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ruby_hubspot_api (0.2)
|
4
|
+
ruby_hubspot_api (0.2.1)
|
5
5
|
httparty (>= 0.1, < 1.0)
|
6
6
|
|
7
7
|
GEM
|
@@ -9,35 +9,33 @@ GEM
|
|
9
9
|
specs:
|
10
10
|
addressable (2.8.7)
|
11
11
|
public_suffix (>= 2.0.2, < 7.0)
|
12
|
-
bigdecimal (3.
|
12
|
+
bigdecimal (3.0.2)
|
13
13
|
byebug (11.1.3)
|
14
|
-
codecov (0.
|
15
|
-
|
16
|
-
simplecov
|
14
|
+
codecov (0.6.0)
|
15
|
+
simplecov (>= 0.15, < 0.22)
|
17
16
|
coderay (1.1.3)
|
18
17
|
crack (1.0.0)
|
19
18
|
bigdecimal
|
20
19
|
rexml
|
21
20
|
diff-lcs (1.5.1)
|
22
|
-
docile (1.
|
21
|
+
docile (1.3.5)
|
23
22
|
dotenv (2.8.1)
|
24
23
|
hashdiff (1.1.1)
|
25
24
|
httparty (0.21.0)
|
26
25
|
mini_mime (>= 1.0.0)
|
27
26
|
multi_xml (>= 0.5.2)
|
28
|
-
json (2.7.2)
|
29
27
|
method_source (1.1.0)
|
30
28
|
mini_mime (1.1.2)
|
31
29
|
multi_xml (0.6.0)
|
32
|
-
pry (0.
|
30
|
+
pry (0.14.2)
|
33
31
|
coderay (~> 1.1)
|
34
32
|
method_source (~> 1.0)
|
35
|
-
pry-byebug (3.
|
33
|
+
pry-byebug (3.8.0)
|
36
34
|
byebug (~> 11.0)
|
37
|
-
pry (~> 0.
|
35
|
+
pry (~> 0.10)
|
38
36
|
public_suffix (4.0.7)
|
39
37
|
rake (13.2.1)
|
40
|
-
rexml (3.
|
38
|
+
rexml (3.2.5)
|
41
39
|
rspec (3.13.0)
|
42
40
|
rspec-core (~> 3.13.0)
|
43
41
|
rspec-expectations (~> 3.13.0)
|
@@ -51,15 +49,13 @@ GEM
|
|
51
49
|
diff-lcs (>= 1.2.0, < 2.0)
|
52
50
|
rspec-support (~> 3.13.0)
|
53
51
|
rspec-support (3.13.1)
|
54
|
-
simplecov (0.
|
52
|
+
simplecov (0.18.5)
|
55
53
|
docile (~> 1.1)
|
56
54
|
simplecov-html (~> 0.11)
|
57
|
-
simplecov_json_formatter (~> 0.1)
|
58
55
|
simplecov-html (0.13.1)
|
59
56
|
simplecov-lcov (0.8.0)
|
60
|
-
simplecov_json_formatter (0.1.4)
|
61
57
|
vcr (6.0.0)
|
62
|
-
webmock (3.
|
58
|
+
webmock (3.18.1)
|
63
59
|
addressable (>= 2.8.0)
|
64
60
|
crack (>= 0.3.2)
|
65
61
|
hashdiff (>= 0.4.0, < 2.0.0)
|
@@ -84,4 +80,4 @@ DEPENDENCIES
|
|
84
80
|
webmock (>= 3.0)
|
85
81
|
|
86
82
|
BUNDLED WITH
|
87
|
-
2.
|
83
|
+
2.2.34
|
data/lib/hubspot/api_client.rb
CHANGED
data/lib/hubspot/config.rb
CHANGED
@@ -15,6 +15,11 @@ module Hubspot
|
|
15
15
|
apply_log_level
|
16
16
|
end
|
17
17
|
|
18
|
+
# Apply the log level to the logger
|
19
|
+
def apply_log_level
|
20
|
+
@logger.level = @log_level
|
21
|
+
end
|
22
|
+
|
18
23
|
private
|
19
24
|
|
20
25
|
# Initialize the default logger
|
@@ -43,11 +48,6 @@ module Hubspot
|
|
43
48
|
end
|
44
49
|
# rubocop:enable Metrics/MethodLength
|
45
50
|
|
46
|
-
# Apply the log level to the logger
|
47
|
-
def apply_log_level
|
48
|
-
@logger.level = @log_level
|
49
|
-
end
|
50
|
-
|
51
51
|
# Set the default log level based on environment
|
52
52
|
def default_log_level
|
53
53
|
if defined?(Rails) && Rails.env.test?
|
data/lib/hubspot/resource.rb
CHANGED
@@ -6,65 +6,20 @@ require_relative './paged_batch'
|
|
6
6
|
|
7
7
|
module Hubspot
|
8
8
|
# rubocop:disable Metrics/ClassLength
|
9
|
-
|
10
|
-
# HubSpot Resource Base Class
|
11
|
-
# This class provides common functionality for interacting with HubSpot API resources such as Contacts, Companies, etc
|
12
|
-
#
|
13
|
-
# It supports common operations like finding, creating, updating, and deleting resources, as well as batch operations.
|
14
|
-
#
|
15
|
-
# This class is meant to be inherited by specific resources like `Hubspot::Contact`.
|
16
|
-
#
|
17
|
-
# You can access the properties of a resource instance by calling the property name as method
|
18
|
-
#
|
19
|
-
# Example Usage:
|
20
|
-
# Hubspot::Contact.find(1)
|
21
|
-
# contact.name # 'Luke'
|
22
|
-
#
|
23
|
-
# company = Hubspot::Company.create(name: "Acme Corp")
|
24
|
-
# company.id.nil? # false
|
25
|
-
#
|
9
|
+
# Hubspot::Resource class
|
26
10
|
class Resource < ApiClient
|
27
11
|
METADATA_FIELDS = %w[createdate hs_object_id lastmodifieddate].freeze
|
28
12
|
|
29
|
-
# Allow read/write access to
|
30
|
-
|
31
|
-
# the id of the object in hubspot
|
32
|
-
attr_accessor :id
|
33
|
-
|
34
|
-
# the properties as if read from the api
|
35
|
-
attr_accessor :properties
|
36
|
-
|
37
|
-
# track any changes made to properties before saving etc
|
38
|
-
attr_accessor :changes
|
39
|
-
|
40
|
-
# any other data sent from the api about the resource
|
41
|
-
attr_accessor :metadata
|
13
|
+
# Allow read/write access to properties and metadata
|
14
|
+
attr_accessor :id, :properties, :changes, :metadata
|
42
15
|
|
43
16
|
class << self
|
44
17
|
# Find a resource by ID and return an instance of the class
|
45
|
-
#
|
46
|
-
# id - [Integer] The ID (or hs_object_id) of the resource to fetch.
|
47
|
-
#
|
48
|
-
# Example:
|
49
|
-
# contact = Hubspot::Contact.find(1)
|
50
|
-
#
|
51
|
-
# Returns An instance of the resource.
|
52
18
|
def find(id)
|
53
19
|
response = get("/crm/v3/objects/#{resource_name}/#{id}")
|
54
20
|
instantiate_from_response(response)
|
55
21
|
end
|
56
22
|
|
57
|
-
# Finds a resource by a given property and value.
|
58
|
-
#
|
59
|
-
# property - The property to search by (e.g., "email").
|
60
|
-
# value - The value of the property to match.
|
61
|
-
# properties - Optional list of properties to return.
|
62
|
-
#
|
63
|
-
# Example:
|
64
|
-
# properties = %w[firstname lastname email last_contacted]
|
65
|
-
# contact = Hubspot::Contact.find_by("email", "john@example.com", properties)
|
66
|
-
#
|
67
|
-
# Returns An instance of the resource.
|
68
23
|
def find_by(property, value, properties = nil)
|
69
24
|
params = { idProperty: property }
|
70
25
|
params[:properties] = properties if properties.is_a?(Array)
|
@@ -72,28 +27,12 @@ module Hubspot
|
|
72
27
|
instantiate_from_response(response)
|
73
28
|
end
|
74
29
|
|
75
|
-
#
|
76
|
-
#
|
77
|
-
# params - The properties to create the resource with.
|
78
|
-
#
|
79
|
-
# Example:
|
80
|
-
# contact = Hubspot::Contact.create(name: "John Doe", email: "john@example.com")
|
81
|
-
#
|
82
|
-
# Returns [Resource] The newly created resource.
|
30
|
+
# Create a new resource
|
83
31
|
def create(params)
|
84
32
|
response = post("/crm/v3/objects/#{resource_name}", body: { properties: params }.to_json)
|
85
33
|
instantiate_from_response(response)
|
86
34
|
end
|
87
35
|
|
88
|
-
# Updates an existing resource by ID.
|
89
|
-
#
|
90
|
-
# id - The ID of the resource to update.
|
91
|
-
# params - The properties to update.
|
92
|
-
#
|
93
|
-
# Example:
|
94
|
-
# contact.update(1, name: "Jane Doe")
|
95
|
-
#
|
96
|
-
# Returns True if the update was successful, false if not
|
97
36
|
def update(id, params)
|
98
37
|
response = patch("/crm/v3/objects/#{resource_name}/#{id}", body: { properties: params }.to_json)
|
99
38
|
raise Hubspot.error_from_response(response) unless response.success?
|
@@ -101,14 +40,6 @@ module Hubspot
|
|
101
40
|
true
|
102
41
|
end
|
103
42
|
|
104
|
-
# Deletes a resource by ID.
|
105
|
-
#
|
106
|
-
# id - The ID of the resource to delete.
|
107
|
-
#
|
108
|
-
# Example:
|
109
|
-
# Hubspot::Contact.archive(1)
|
110
|
-
#
|
111
|
-
# Returns True if the deletion was successful, false if not
|
112
43
|
def archive(id)
|
113
44
|
response = delete("/crm/v3/objects/#{resource_name}/#{id}")
|
114
45
|
raise Hubspot.error_from_response(response) unless response.success?
|
@@ -116,14 +47,6 @@ module Hubspot
|
|
116
47
|
true
|
117
48
|
end
|
118
49
|
|
119
|
-
# Lists all resources with optional filters and pagination.
|
120
|
-
#
|
121
|
-
# params - Optional parameters to filter or paginate the results.
|
122
|
-
#
|
123
|
-
# Example:
|
124
|
-
# contacts = Hubspot::Contact.list(limit: 100)
|
125
|
-
#
|
126
|
-
# Returns [PagedCollection] A collection of resources.
|
127
50
|
def list(params = {})
|
128
51
|
PagedCollection.new(
|
129
52
|
url: "/crm/v3/objects/#{resource_name}",
|
@@ -132,17 +55,6 @@ module Hubspot
|
|
132
55
|
)
|
133
56
|
end
|
134
57
|
|
135
|
-
# Performs a batch read operation to retrieve multiple resources by their IDs.
|
136
|
-
#
|
137
|
-
# object_ids - A list of resource IDs to fetch.
|
138
|
-
#
|
139
|
-
# id_property - The property to use for identifying resources (default: 'id').
|
140
|
-
#
|
141
|
-
#
|
142
|
-
# Example:
|
143
|
-
# Hubspot::Contact.batch_read([1, 2, 3])
|
144
|
-
#
|
145
|
-
# Returns [PagedBatch] A paged batch of resources (call .each_page to cycle through pages from the API)
|
146
58
|
def batch_read(object_ids = [], id_property: 'id')
|
147
59
|
params = id_property == 'id' ? {} : { idProperty: id_property }
|
148
60
|
|
@@ -154,23 +66,11 @@ module Hubspot
|
|
154
66
|
)
|
155
67
|
end
|
156
68
|
|
157
|
-
# Performs a batch read operation to retrieve multiple resources by their IDs
|
158
|
-
# until there are none left
|
159
|
-
#
|
160
|
-
# object_ids - A list of resource IDs to fetch. [Array<Integer>]
|
161
|
-
# id_property - The property to use for identifying resources (default: 'id').
|
162
|
-
#
|
163
|
-
# Example:
|
164
|
-
# Hubspot::Contact.batch_read([1, 2, 3])
|
165
|
-
#
|
166
|
-
# Returns [Hubspot::Batch] A batch of resources that can be operated on further
|
167
69
|
def batch_read_all(object_ids = [], id_property: 'id')
|
168
70
|
Hubspot::Batch.read(self, object_ids, id_property: id_property)
|
169
71
|
end
|
170
72
|
|
171
|
-
#
|
172
|
-
#
|
173
|
-
# Returns [Array<Hubspot::Property>] An array of hubspot properties
|
73
|
+
# Get the complete list of fields (properties) for the object
|
174
74
|
def properties
|
175
75
|
@properties ||= begin
|
176
76
|
response = get("/crm/v3/properties/#{resource_name}")
|
@@ -178,34 +78,18 @@ module Hubspot
|
|
178
78
|
end
|
179
79
|
end
|
180
80
|
|
181
|
-
# Retrieve the complete list of user defined properties for this resource class
|
182
|
-
#
|
183
|
-
# Returns [Array<Hubspot::Property>] An array of hubspot properties
|
184
81
|
def custom_properties
|
185
82
|
properties.reject { |property| property['hubspotDefined'] }
|
186
83
|
end
|
187
84
|
|
188
|
-
# Retrieve the complete list of updatable properties for this resource class
|
189
|
-
#
|
190
|
-
# Returns [Array<Hubspot::Property>] An array of updateable hubspot properties
|
191
85
|
def updatable_properties
|
192
86
|
properties.reject(&:read_only?)
|
193
87
|
end
|
194
88
|
|
195
|
-
# Retrieve the complete list of read-only properties for this resource class
|
196
|
-
#
|
197
|
-
# Returns [Array<Hubspot::Property>] An array of read-only hubspot properties
|
198
89
|
def read_only_properties
|
199
|
-
properties.select(&:read_only)
|
90
|
+
properties.select(&:read_only?)
|
200
91
|
end
|
201
92
|
|
202
|
-
# Retrieve information about a specific property
|
203
|
-
#
|
204
|
-
# Example:
|
205
|
-
# property = Hubspot::Contact.property('industry_sector')
|
206
|
-
# values_for_select = property.options.each_with_object({}) { |prop, ps| ps[prop['value']] = prop['label'] }
|
207
|
-
#
|
208
|
-
# Returns [Array<Hubspot::Property>] An array of hubspot properties
|
209
93
|
def property(property_name)
|
210
94
|
properties.detect { |prop| prop.name == property_name }
|
211
95
|
end
|
@@ -222,45 +106,6 @@ module Hubspot
|
|
222
106
|
}.freeze
|
223
107
|
|
224
108
|
# rubocop:disable Metrics/MethodLength
|
225
|
-
|
226
|
-
# Search for resources using a flexible query format and optional properties.
|
227
|
-
#
|
228
|
-
# This method allows searching for resources by passing a query in the form of a string (for full-text search)
|
229
|
-
# or a hash with special suffixes on the keys to define different comparison operators.
|
230
|
-
# You can also specify which properties to return and the number of results per page.
|
231
|
-
#
|
232
|
-
# Available suffixes for query keys (when using a hash):
|
233
|
-
# - `_contains`: Matches values that contain the given string.
|
234
|
-
# - `_gt`: Greater than comparison.
|
235
|
-
# - `_lt`: Less than comparison.
|
236
|
-
# - `_gte`: Greater than or equal to comparison.
|
237
|
-
# - `_lte`: Less than or equal to comparison.
|
238
|
-
# - `_neq`: Not equal to comparison.
|
239
|
-
# - `_in`: Matches any of the values in the given array.
|
240
|
-
#
|
241
|
-
# If no suffix is provided, the default comparison is equality (`EQ`).
|
242
|
-
#
|
243
|
-
# query - [String, Hash] The query for searching. This can be either:
|
244
|
-
# - A String: for full-text search.
|
245
|
-
# - A Hash: where each key represents a property and may have suffixes for the comparison
|
246
|
-
# (e.g., `{ email_contains: 'example.org', age_gt: 30 }`).
|
247
|
-
# properties - An optional array of property names to return in the search results. [Array<String>]
|
248
|
-
# If not specified or empty, HubSpot will return the default set of properties.
|
249
|
-
# page_size - The number of results to return per page (default is 10 for contacts and 100 for everything else).
|
250
|
-
#
|
251
|
-
# Example Usage:
|
252
|
-
# # Full-text search for 'example.org':
|
253
|
-
# contacts = Hubspot::Contact.search(query: "example.org",
|
254
|
-
# properties: ["email", "firstname", "lastname"], page_size: 50)
|
255
|
-
#
|
256
|
-
# # Search for contacts whose email contains 'example.org' and are older than 30:
|
257
|
-
# contacts = Hubspot::Contact.search(
|
258
|
-
# query: { email_contains: 'example.org', age_gt: 30 },
|
259
|
-
# properties: ["email", "firstname", "lastname"],
|
260
|
-
# page_size: 50
|
261
|
-
# )
|
262
|
-
#
|
263
|
-
# Returns [PagedCollection] A paged collection of results that can be iterated over.
|
264
109
|
def search(query:, properties: [], page_size: 100)
|
265
110
|
search_body = {}
|
266
111
|
|
@@ -340,23 +185,6 @@ module Hubspot
|
|
340
185
|
end
|
341
186
|
|
342
187
|
# rubocop:disable Ling/MissingSuper
|
343
|
-
|
344
|
-
# Public: Initialize a resouce
|
345
|
-
#
|
346
|
-
# data - [2D Hash, nested Hash] data to initialise the resourse This can be either:
|
347
|
-
# - A Simple 2D Hash, key value pairs of property => value (for the create option)
|
348
|
-
# - A structured hash consisting of { id: <hs_object_id>, properties: {}, ... }
|
349
|
-
# This is the same structure as per the API, and can be rebuilt if you store the id
|
350
|
-
# of the object against your own data
|
351
|
-
#
|
352
|
-
# Example:
|
353
|
-
# contact = Hubspot::Contact.new(firstname: 'Luke', lastname: 'Skywalker', email: 'luke@jedi.org')
|
354
|
-
# contact.persisted? # false
|
355
|
-
# contact.save # creates the record in Hubspot
|
356
|
-
# contact.persisted? # true
|
357
|
-
# puts "Contact saved with hubspot id #{contact.id}"
|
358
|
-
#
|
359
|
-
# existing_contact = Hubspot::Contact.new(id: hubspot_id, properties: contact.to_hubspot_properties)
|
360
188
|
def initialize(data = {})
|
361
189
|
data.transform_keys!(&:to_s)
|
362
190
|
@id = extract_id(data)
|
@@ -368,23 +196,13 @@ module Hubspot
|
|
368
196
|
initialize_new_object(data)
|
369
197
|
end
|
370
198
|
end
|
371
|
-
|
372
199
|
# rubocop:enable Ling/MissingSuper
|
373
200
|
|
374
|
-
# Determine the state of the object
|
375
|
-
#
|
376
|
-
# Returns Boolean
|
377
201
|
def changes?
|
378
202
|
!@changes.empty?
|
379
203
|
end
|
380
204
|
|
381
|
-
#
|
382
|
-
# If the resource was already persisted (e.g. it was retrieved from the API)
|
383
|
-
# it will be updated using values from @changes
|
384
|
-
#
|
385
|
-
# If the resource is new (no id) it will be created
|
386
|
-
#
|
387
|
-
# Returns Boolean
|
205
|
+
# Instance methods for update (or save)
|
388
206
|
def save
|
389
207
|
if persisted?
|
390
208
|
self.class.update(@id, @changes).tap do |result|
|
@@ -398,22 +216,11 @@ module Hubspot
|
|
398
216
|
end
|
399
217
|
end
|
400
218
|
|
401
|
-
# If the resource exists in Hubspot
|
402
|
-
#
|
403
|
-
# Returns Boolean
|
404
219
|
def persisted?
|
405
220
|
@id ? true : false
|
406
221
|
end
|
407
222
|
|
408
223
|
# Update the resource
|
409
|
-
#
|
410
|
-
# params - hash of properties to update in key value pairs
|
411
|
-
#
|
412
|
-
# Example:
|
413
|
-
# contact = Hubspot::Contact.find(hubspot_contact_id)
|
414
|
-
# contact.update(status: 'gold customer', last_contacted_at: Time.now.utc.iso8601)
|
415
|
-
#
|
416
|
-
# Returns Boolean
|
417
224
|
def update(params)
|
418
225
|
raise 'Not able to update as not persisted' unless persisted?
|
419
226
|
|
@@ -424,12 +231,6 @@ module Hubspot
|
|
424
231
|
save
|
425
232
|
end
|
426
233
|
|
427
|
-
# Archive the object in Hubspot
|
428
|
-
#
|
429
|
-
# Example:
|
430
|
-
# company = Hubspot::Company.find(hubspot_company_id)
|
431
|
-
# company.delete
|
432
|
-
#
|
433
234
|
def delete
|
434
235
|
self.class.archive(id)
|
435
236
|
end
|
@@ -440,11 +241,7 @@ module Hubspot
|
|
440
241
|
end
|
441
242
|
|
442
243
|
# rubocop:disable Metrics/MethodLength
|
443
|
-
|
444
|
-
# getter: Check the properties and changes hashes to see if the method
|
445
|
-
# being called is a key, and return the corresponding value
|
446
|
-
# setter: If the method ends in "=" persist the value in the changes hash
|
447
|
-
# (when it is different from the corresponding value in properties if set)
|
244
|
+
# Handle dynamic getter and setter methods with method_missing
|
448
245
|
def method_missing(method, *args)
|
449
246
|
method_name = method.to_s
|
450
247
|
|
@@ -470,10 +267,9 @@ module Hubspot
|
|
470
267
|
# Fallback if the method or attribute is not found
|
471
268
|
super
|
472
269
|
end
|
473
|
-
|
474
270
|
# rubocop:enable Metrics/MethodLength
|
475
271
|
|
476
|
-
# Ensure respond_to_missing?
|
272
|
+
# Ensure respond_to_missing? is properly overridden
|
477
273
|
def respond_to_missing?(method_name, include_private = false)
|
478
274
|
property_name = method_name.to_s.chomp('=')
|
479
275
|
@properties.key?(property_name) || @changes.key?(property_name) || super
|
data/lib/hubspot/version.rb
CHANGED
data/lib/hubspot.rb
CHANGED
data/lib/support/patches.rb
CHANGED
@@ -9,3 +9,30 @@ class Object
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
12
|
+
|
13
|
+
# At some point this will seem like a bad idea ;)
|
14
|
+
|
15
|
+
# :nocov:
|
16
|
+
if RUBY_VERSION < '2.5.0'
|
17
|
+
class Hash
|
18
|
+
# Non-mutating version (returns a new hash with transformed keys)
|
19
|
+
def transform_keys
|
20
|
+
return enum_for(:transform_keys) unless block_given?
|
21
|
+
result = {}
|
22
|
+
each_key do |key|
|
23
|
+
result[yield(key)] = self[key]
|
24
|
+
end
|
25
|
+
result
|
26
|
+
end
|
27
|
+
|
28
|
+
# Mutating version (modifies the hash in place)
|
29
|
+
def transform_keys!
|
30
|
+
return enum_for(:transform_keys!) unless block_given?
|
31
|
+
keys.each do |key|
|
32
|
+
self[yield(key)] = delete(key)
|
33
|
+
end
|
34
|
+
self
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
# :nocov:end
|
data/ruby_hubspot_api.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.homepage = 'https://github.com/sensadrome/ruby_hubspot_api'
|
17
17
|
spec.license = 'MIT'
|
18
18
|
|
19
|
-
spec.required_ruby_version = '>= 2.
|
19
|
+
spec.required_ruby_version = '>= 2.4'
|
20
20
|
|
21
21
|
# Prevent pushing this gem to RubyGems.org.
|
22
22
|
# To allow pushes either set the 'allowed_push_host'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_hubspot_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.1
|
4
|
+
version: 0.2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Brook
|
@@ -246,14 +246,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
246
246
|
requirements:
|
247
247
|
- - ">="
|
248
248
|
- !ruby/object:Gem::Version
|
249
|
-
version: '2.
|
249
|
+
version: '2.4'
|
250
250
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
251
251
|
requirements:
|
252
252
|
- - ">="
|
253
253
|
- !ruby/object:Gem::Version
|
254
254
|
version: '0'
|
255
255
|
requirements: []
|
256
|
-
|
256
|
+
rubyforge_project:
|
257
|
+
rubygems_version: 2.6.14.4
|
257
258
|
signing_key:
|
258
259
|
specification_version: 4
|
259
260
|
summary: ruby_hubspot_api is an ORM-like wrapper for the Hubspot API
|