ruby_hubspot_api 0.1.2.1 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +47 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +36 -1
- data/Gemfile.lock +19 -10
- data/README.md +316 -24
- data/lib/hubspot/api_client.rb +40 -8
- data/lib/hubspot/batch.rb +252 -0
- data/lib/hubspot/config.rb +2 -1
- data/lib/hubspot/paged_batch.rb +56 -0
- data/lib/hubspot/paged_collection.rb +3 -18
- data/lib/hubspot/property.rb +4 -0
- data/lib/hubspot/resource.rb +248 -15
- data/lib/hubspot/version.rb +1 -1
- data/lib/hubspot.rb +14 -0
- data/lib/ruby_hubspot_api.rb +3 -0
- data/lib/support/patches.rb +11 -0
- data/ruby_hubspot_api.gemspec +4 -2
- metadata +41 -10
- data/.ruby-version +0 -1
data/lib/hubspot/resource.rb
CHANGED
@@ -1,23 +1,70 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative './api_client'
|
4
|
+
require_relative './paged_collection'
|
5
|
+
require_relative './paged_batch'
|
4
6
|
|
5
7
|
module Hubspot
|
6
8
|
# rubocop:disable Metrics/ClassLength
|
7
|
-
|
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
|
+
#
|
8
26
|
class Resource < ApiClient
|
9
27
|
METADATA_FIELDS = %w[createdate hs_object_id lastmodifieddate].freeze
|
10
28
|
|
11
|
-
# Allow read/write access to properties and metadata
|
12
|
-
|
29
|
+
# Allow read/write access to id, properties, changes and metadata
|
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
42
|
|
14
43
|
class << self
|
15
44
|
# 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.
|
16
52
|
def find(id)
|
17
53
|
response = get("/crm/v3/objects/#{resource_name}/#{id}")
|
18
54
|
instantiate_from_response(response)
|
19
55
|
end
|
20
56
|
|
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.
|
21
68
|
def find_by(property, value, properties = nil)
|
22
69
|
params = { idProperty: property }
|
23
70
|
params[:properties] = properties if properties.is_a?(Array)
|
@@ -25,12 +72,28 @@ module Hubspot
|
|
25
72
|
instantiate_from_response(response)
|
26
73
|
end
|
27
74
|
|
28
|
-
#
|
75
|
+
# Creates a new resource with the given parameters.
|
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.
|
29
83
|
def create(params)
|
30
84
|
response = post("/crm/v3/objects/#{resource_name}", body: { properties: params }.to_json)
|
31
85
|
instantiate_from_response(response)
|
32
86
|
end
|
33
87
|
|
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
|
34
97
|
def update(id, params)
|
35
98
|
response = patch("/crm/v3/objects/#{resource_name}/#{id}", body: { properties: params }.to_json)
|
36
99
|
raise Hubspot.error_from_response(response) unless response.success?
|
@@ -38,6 +101,14 @@ module Hubspot
|
|
38
101
|
true
|
39
102
|
end
|
40
103
|
|
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
|
41
112
|
def archive(id)
|
42
113
|
response = delete("/crm/v3/objects/#{resource_name}/#{id}")
|
43
114
|
raise Hubspot.error_from_response(response) unless response.success?
|
@@ -45,6 +116,14 @@ module Hubspot
|
|
45
116
|
true
|
46
117
|
end
|
47
118
|
|
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.
|
48
127
|
def list(params = {})
|
49
128
|
PagedCollection.new(
|
50
129
|
url: "/crm/v3/objects/#{resource_name}",
|
@@ -53,7 +132,45 @@ module Hubspot
|
|
53
132
|
)
|
54
133
|
end
|
55
134
|
|
56
|
-
#
|
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
|
+
def batch_read(object_ids = [], id_property: 'id')
|
147
|
+
params = id_property == 'id' ? {} : { idProperty: id_property }
|
148
|
+
|
149
|
+
PagedBatch.new(
|
150
|
+
url: "/crm/v3/objects/#{resource_name}/batch/read",
|
151
|
+
params: params,
|
152
|
+
object_ids: object_ids,
|
153
|
+
resource_class: self
|
154
|
+
)
|
155
|
+
end
|
156
|
+
|
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
|
+
def batch_read_all(object_ids = [], id_property: 'id')
|
168
|
+
Hubspot::Batch.read(self, object_ids, id_property: id_property)
|
169
|
+
end
|
170
|
+
|
171
|
+
# Retrieve the complete list of properties for this resource class
|
172
|
+
#
|
173
|
+
# Returns [Array<Hubspot::Property>] An array of hubspot properties
|
57
174
|
def properties
|
58
175
|
@properties ||= begin
|
59
176
|
response = get("/crm/v3/properties/#{resource_name}")
|
@@ -61,10 +178,34 @@ module Hubspot
|
|
61
178
|
end
|
62
179
|
end
|
63
180
|
|
181
|
+
# Retrieve the complete list of user defined properties for this resource class
|
182
|
+
#
|
183
|
+
# Returns [Array<Hubspot::Property>] An array of hubspot properties
|
64
184
|
def custom_properties
|
65
185
|
properties.reject { |property| property['hubspotDefined'] }
|
66
186
|
end
|
67
187
|
|
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
|
+
def updatable_properties
|
192
|
+
properties.reject(&:read_only?)
|
193
|
+
end
|
194
|
+
|
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
|
+
def read_only_properties
|
199
|
+
properties.select(&:read_only)
|
200
|
+
end
|
201
|
+
|
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
|
68
209
|
def property(property_name)
|
69
210
|
properties.detect { |prop| prop.name == property_name }
|
70
211
|
end
|
@@ -81,6 +222,45 @@ module Hubspot
|
|
81
222
|
}.freeze
|
82
223
|
|
83
224
|
# 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.
|
84
264
|
def search(query:, properties: [], page_size: 100)
|
85
265
|
search_body = {}
|
86
266
|
|
@@ -111,8 +291,6 @@ module Hubspot
|
|
111
291
|
|
112
292
|
# rubocop:enable Metrics/MethodLength
|
113
293
|
|
114
|
-
private
|
115
|
-
|
116
294
|
# Define the resource name based on the class
|
117
295
|
def resource_name
|
118
296
|
name = self.name.split('::').last.downcase
|
@@ -123,6 +301,8 @@ module Hubspot
|
|
123
301
|
end
|
124
302
|
end
|
125
303
|
|
304
|
+
private
|
305
|
+
|
126
306
|
# Instantiate a single resource object from the response
|
127
307
|
def instantiate_from_response(response)
|
128
308
|
data = handle_response(response)
|
@@ -160,20 +340,51 @@ module Hubspot
|
|
160
340
|
end
|
161
341
|
|
162
342
|
# 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)
|
163
360
|
def initialize(data = {})
|
361
|
+
data.transform_keys!(&:to_s)
|
164
362
|
@id = extract_id(data)
|
165
363
|
@properties = {}
|
166
364
|
@metadata = {}
|
167
|
-
|
168
365
|
if @id
|
169
366
|
initialize_from_api(data)
|
170
367
|
else
|
171
368
|
initialize_new_object(data)
|
172
369
|
end
|
173
370
|
end
|
371
|
+
|
174
372
|
# rubocop:enable Ling/MissingSuper
|
175
373
|
|
176
|
-
#
|
374
|
+
# Determine the state of the object
|
375
|
+
#
|
376
|
+
# Returns Boolean
|
377
|
+
def changes?
|
378
|
+
!@changes.empty?
|
379
|
+
end
|
380
|
+
|
381
|
+
# Create or Update the resource.
|
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
|
177
388
|
def save
|
178
389
|
if persisted?
|
179
390
|
self.class.update(@id, @changes).tap do |result|
|
@@ -187,11 +398,22 @@ module Hubspot
|
|
187
398
|
end
|
188
399
|
end
|
189
400
|
|
401
|
+
# If the resource exists in Hubspot
|
402
|
+
#
|
403
|
+
# Returns Boolean
|
190
404
|
def persisted?
|
191
405
|
@id ? true : false
|
192
406
|
end
|
193
407
|
|
194
408
|
# 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
|
195
417
|
def update(params)
|
196
418
|
raise 'Not able to update as not persisted' unless persisted?
|
197
419
|
|
@@ -202,13 +424,27 @@ module Hubspot
|
|
202
424
|
save
|
203
425
|
end
|
204
426
|
|
427
|
+
# Archive the object in Hubspot
|
428
|
+
#
|
429
|
+
# Example:
|
430
|
+
# company = Hubspot::Company.find(hubspot_company_id)
|
431
|
+
# company.delete
|
432
|
+
#
|
205
433
|
def delete
|
206
434
|
self.class.archive(id)
|
207
435
|
end
|
208
436
|
alias archive delete
|
209
437
|
|
438
|
+
def resource_name
|
439
|
+
self.class.resource_name
|
440
|
+
end
|
441
|
+
|
210
442
|
# rubocop:disable Metrics/MethodLength
|
211
|
-
|
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)
|
212
448
|
def method_missing(method, *args)
|
213
449
|
method_name = method.to_s
|
214
450
|
|
@@ -232,19 +468,16 @@ module Hubspot
|
|
232
468
|
end
|
233
469
|
|
234
470
|
# Fallback if the method or attribute is not found
|
235
|
-
# :nocov:
|
236
471
|
super
|
237
|
-
# :nocov:
|
238
472
|
end
|
473
|
+
|
239
474
|
# rubocop:enable Metrics/MethodLength
|
240
475
|
|
241
|
-
# Ensure respond_to_missing?
|
242
|
-
# :nocov:
|
476
|
+
# Ensure respond_to_missing? handles existing keys in the properties anc changes hashes
|
243
477
|
def respond_to_missing?(method_name, include_private = false)
|
244
478
|
property_name = method_name.to_s.chomp('=')
|
245
479
|
@properties.key?(property_name) || @changes.key?(property_name) || super
|
246
480
|
end
|
247
|
-
# :nocov:
|
248
481
|
|
249
482
|
private
|
250
483
|
|
data/lib/hubspot/version.rb
CHANGED
data/lib/hubspot.rb
CHANGED
@@ -19,6 +19,7 @@ module Hubspot
|
|
19
19
|
def configure
|
20
20
|
yield(config) if block_given?
|
21
21
|
set_client_headers if config.access_token
|
22
|
+
set_request_timeouts
|
22
23
|
end
|
23
24
|
|
24
25
|
def configured?
|
@@ -31,5 +32,18 @@ module Hubspot
|
|
31
32
|
def set_client_headers
|
32
33
|
Hubspot::ApiClient.headers 'Authorization' => "Bearer #{config.access_token}"
|
33
34
|
end
|
35
|
+
|
36
|
+
def set_request_timeouts
|
37
|
+
config.timeout && Hubspot::ApiClient.default_timeout(config.timeout)
|
38
|
+
timeouts = %i[open_timeout read_timeout]
|
39
|
+
timeouts << :write_timeout if RUBY_VERSION >= '2.6'
|
40
|
+
|
41
|
+
timeouts.each do |t|
|
42
|
+
timeout = config.send(t)
|
43
|
+
next unless timeout
|
44
|
+
|
45
|
+
Hubspot::ApiClient.send(t, timeout)
|
46
|
+
end
|
47
|
+
end
|
34
48
|
end
|
35
49
|
end
|
data/lib/ruby_hubspot_api.rb
CHANGED
data/ruby_hubspot_api.gemspec
CHANGED
@@ -40,12 +40,14 @@ Gem::Specification.new do |spec|
|
|
40
40
|
# Define development dependencies
|
41
41
|
spec.add_development_dependency 'rake', '>= 11.0', '< 14.0'
|
42
42
|
|
43
|
-
spec.add_development_dependency 'bundler', '>= 2.0'
|
43
|
+
spec.add_development_dependency 'bundler', '>= 2.0', '< 2.4.0'
|
44
|
+
spec.add_development_dependency 'codecov'
|
44
45
|
spec.add_development_dependency 'dotenv', '>= 2.0'
|
45
46
|
spec.add_development_dependency 'pry', '>= 0.1'
|
46
47
|
spec.add_development_dependency 'pry-byebug', '>= 3.0'
|
47
48
|
spec.add_development_dependency 'rspec', '>= 3.0'
|
48
|
-
spec.add_development_dependency 'simplecov'
|
49
|
+
spec.add_development_dependency 'simplecov'
|
50
|
+
spec.add_development_dependency 'simplecov-lcov'
|
49
51
|
spec.add_development_dependency 'vcr', '>= 6.0'
|
50
52
|
spec.add_development_dependency 'webmock', '>= 3.0'
|
51
53
|
|
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.2.1
|
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-
|
11
|
+
date: 2024-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -37,6 +37,9 @@ dependencies:
|
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '2.0'
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 2.4.0
|
40
43
|
type: :development
|
41
44
|
prerelease: false
|
42
45
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -44,6 +47,23 @@ dependencies:
|
|
44
47
|
- - ">="
|
45
48
|
- !ruby/object:Gem::Version
|
46
49
|
version: '2.0'
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 2.4.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: codecov
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
47
67
|
- !ruby/object:Gem::Dependency
|
48
68
|
name: dotenv
|
49
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,20 +126,28 @@ dependencies:
|
|
106
126
|
requirements:
|
107
127
|
- - ">="
|
108
128
|
- !ruby/object:Gem::Version
|
109
|
-
version: '0
|
110
|
-
- - "<"
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version: '1.0'
|
129
|
+
version: '0'
|
113
130
|
type: :development
|
114
131
|
prerelease: false
|
115
132
|
version_requirements: !ruby/object:Gem::Requirement
|
116
133
|
requirements:
|
117
134
|
- - ">="
|
118
135
|
- !ruby/object:Gem::Version
|
119
|
-
version: '0
|
120
|
-
|
136
|
+
version: '0'
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: simplecov-lcov
|
139
|
+
requirement: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ">="
|
121
142
|
- !ruby/object:Gem::Version
|
122
|
-
version: '
|
143
|
+
version: '0'
|
144
|
+
type: :development
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
123
151
|
- !ruby/object:Gem::Dependency
|
124
152
|
name: vcr
|
125
153
|
requirement: !ruby/object:Gem::Requirement
|
@@ -176,10 +204,10 @@ extensions: []
|
|
176
204
|
extra_rdoc_files: []
|
177
205
|
files:
|
178
206
|
- ".env.sample"
|
207
|
+
- ".github/workflows/ruby.yml"
|
179
208
|
- ".gitignore"
|
180
209
|
- ".rspec"
|
181
210
|
- ".rubocop.yml"
|
182
|
-
- ".ruby-version"
|
183
211
|
- CHANGELOG.md
|
184
212
|
- Gemfile
|
185
213
|
- Gemfile.lock
|
@@ -190,16 +218,19 @@ files:
|
|
190
218
|
- bin/setup
|
191
219
|
- lib/hubspot.rb
|
192
220
|
- lib/hubspot/api_client.rb
|
221
|
+
- lib/hubspot/batch.rb
|
193
222
|
- lib/hubspot/company.rb
|
194
223
|
- lib/hubspot/config.rb
|
195
224
|
- lib/hubspot/contact.rb
|
196
225
|
- lib/hubspot/exceptions.rb
|
226
|
+
- lib/hubspot/paged_batch.rb
|
197
227
|
- lib/hubspot/paged_collection.rb
|
198
228
|
- lib/hubspot/property.rb
|
199
229
|
- lib/hubspot/resource.rb
|
200
230
|
- lib/hubspot/user.rb
|
201
231
|
- lib/hubspot/version.rb
|
202
232
|
- lib/ruby_hubspot_api.rb
|
233
|
+
- lib/support/patches.rb
|
203
234
|
- ruby_hubspot_api.gemspec
|
204
235
|
homepage: https://github.com/sensadrome/ruby_hubspot_api
|
205
236
|
licenses:
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.5.3
|