hubspot_client 0.1.0.beta1 → 0.1.0.beta2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12f80ed6afbfbb4fc8561616156762128e77defcca1c53bc4f07b93affaebd18
4
- data.tar.gz: eaf249fb97115e5178e4785e3824574973817b78e9cc2713af81b46e4f3833af
3
+ metadata.gz: 6bc3a880bcae828da2e0ae5b37c4027339352b7294868caeb3b87395be557897
4
+ data.tar.gz: 78a1a367a7a052726fa95f4d792ffdcb1d619ba58cfde4a3f3f1842277aedb41
5
5
  SHA512:
6
- metadata.gz: b2f43fe74c400cc82d075ff771392431a55294418195a8514018d9b09a4dce169a0986d829967a0c7653b197ed744afff4267d013702bad2371b40f32bd4a59f
7
- data.tar.gz: edd7430e6c3cb224a56fbea5e4e59042c3bb752ac6c3616fbe5763f24f94fbf2cbd8e6cfb82015b49b03fa283c875582ba3f4beb12986125f9f9b8ba31ee8eeb
6
+ metadata.gz: c5d4d5cd7dae89474741e4a985452b2a7aaf15681ba97b61a4fe8ddf8a52d5ecebd0267a6c4304470e65b5a20c35cf52a46c3f4aa66cb86febe0c313d5534914
7
+ data.tar.gz: 965e6fbd91337cc4f22c88ed74b4ca02ffc1a5fd3dacc8dbd9b0a3efc7254c288fa06efc840827fb453372b389f9cf35fd66398c15f276e3103ec863a820a221
data/CHANGELOG.md ADDED
@@ -0,0 +1,19 @@
1
+ ## 0.1.0.beta2 (2022-11-28)
2
+
3
+ ### Features
4
+ * Add associate company to contact logic
5
+ * Update README to make it more understanble
6
+
7
+ ### Breaking Changes
8
+ None
9
+
10
+ ## 0.1.0.beta1 (2022-11-25)
11
+
12
+ ### Features
13
+ * Add Company Model and Client
14
+ * Add primary_company method to Contact model
15
+ * Add Properties Client
16
+ * Add Matrix for RSpec tests and support for the moment Ruby 3.0 and 3.1
17
+
18
+ ## Breaking Changes
19
+ None
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hubspot_client (0.1.0.beta1)
4
+ hubspot_client (0.1.0.beta2)
5
5
  httparty (~> 0.20.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -38,6 +38,7 @@ The idea is that the models behave like an ActiveRecord Model.
38
38
 
39
39
  #### find
40
40
  You can find by `hubspot_id` or `email`
41
+
41
42
  ```ruby
42
43
  HubspotClient::Model::Contact.find(hubspot_id: '1337')
43
44
  => #<HubspotClient::Model::Contact createdate="2022-11-11T11:57:15.901Z", email="vader@example.com", firstname="Darth", hs_object_id="1337", lastmodifieddate="2022-11-17T13:31:00.526Z", lastname="Vader">
@@ -46,9 +47,62 @@ HubspotClient::Model::Contact.find(email: 'vader@example.com')
46
47
  => #<HubspotClient::Model::Contact createdate="2022-11-11T11:57:15.901Z", email="vader@example.com", firstname="Darth", hs_object_id="1337", lastmodifieddate="2022-11-17T13:31:00.526Z", lastname="Vader">
47
48
  ```
48
49
 
50
+ #### Associate_primary_company
51
+
52
+ Successfull Request
53
+ ```ruby
54
+ hubspot_contact = HubspotClient::Model::Contact.find(hubspot_id: '1337')
55
+ => #<HubspotClient::Model::Contact createdate="2022-11-11T11:57:15.901Z", email="vader@example.com", firstname="Darth", hs_object_id="1337", lastmodifieddate="2022-11-17T13:31:00.526Z", lastname="Vader">
56
+
57
+ hubspot_contact.associate_primary_company(6582942445)
58
+ => true
59
+ ```
60
+
49
61
  ### Company
50
62
 
51
- [Hubspot- API](https://developers.hubspot.com/docs/api/crm/companies)
63
+ Here you can find the [Hubspot-Companies-API-Documentation](https://developers.hubspot.com/docs/api/crm/companies)
64
+
65
+ #### find
66
+
67
+ Find a company be `hubspot_id`
68
+
69
+ ```ruby
70
+ HubspotClient::Model::Company.find(hubspot_id: '6614067165')
71
+ => #<HubspotClient::Model::Company address="Todesternstraße 1", city="Todestern", createdate="2022-11-28T13:45:40.989Z", hs_lastmodifieddate="2022-11-28T13:45:44.933Z", hs_object_id="6614067165", name="Todesternverwaltungs GmbH", phone="0152123456789", zip="1337">
72
+ ```
73
+
74
+ #### create
75
+
76
+ ```ruby
77
+ example_properties = { name: 'Todesternverwaltungs GmbH',
78
+ phone: '0152123456789',
79
+ address: 'Todesternstraße 1',
80
+ city: 'Todestern',
81
+ zip: '1337' }
82
+
83
+ HubspotClient::Model::Company.create(example_properties)
84
+ => #<HubspotClient::Model::Company address="Todesternstraße 1", city="Todestern", createdate="2022-11-28T13:45:40.989Z", hs_lastmodifieddate="2022-11-28T13:45:40.989Z", hs_object_id="6614067165", hs_pipeline="companies-lifecycle-pipeline", lifecyclestage="lead", name="Todesternverwaltungs GmbH", phone="0152123456789", zip="1337">
85
+ ```
86
+
87
+ #### update
88
+
89
+ ```ruby
90
+ hubspot_company = HubspotClient::Model::Company.find(hubspot_id: '6614067165')
91
+
92
+ # You can change the attribute like so:
93
+ hubspot_company.name = 'Blubber'
94
+
95
+ # or like so:
96
+ hubspot_company.assign_attributes(name: 'Blubber')
97
+
98
+ # then you can run:
99
+ hubspot_company.update
100
+
101
+ # you can also do it directly in the update method:
102
+ hubspot_company.update({ name: 'Blubber' })
103
+ ```
104
+
105
+
52
106
 
53
107
  ### Subscription-Preferences
54
108
 
@@ -5,27 +5,28 @@ module HubspotClient
5
5
  class ContactNotFound < StandardError; end
6
6
  class ContactNotCreated < StandardError; end
7
7
  class ContactNotUpdated < StandardError; end
8
+ class AssociationError < StandardError; end
8
9
 
9
10
  class Contact
10
11
  include HTTParty
11
12
  base_uri 'https://api.hubapi.com'
12
13
 
13
- BASE_PATH = '/crm/v3/objects/contacts'
14
+ BASE_PATH_V3 = '/crm/v3/objects/contacts'
14
15
  FIND_PROPERTIES = %w[firstname lastname email phone lifecyclestage associatedcompanyid].freeze
15
16
 
16
17
  def find_by_email(email)
17
18
  query_params = find_query_params({ idProperty: 'email' })
18
- find_by("#{BASE_PATH}/#{email}?#{query_params}")
19
+ find_by("#{BASE_PATH_V3}/#{email}?#{query_params}")
19
20
  end
20
21
 
21
22
  def find_by_id(hubspot_id)
22
23
  query_params = find_query_params
23
24
 
24
- find_by("#{BASE_PATH}/#{hubspot_id}?#{query_params}")
25
+ find_by("#{BASE_PATH_V3}/#{hubspot_id}?#{query_params}")
25
26
  end
26
27
 
27
28
  def create(properties)
28
- response = self.class.post(BASE_PATH,
29
+ response = self.class.post(BASE_PATH_V3,
29
30
  body: { properties: properties }.to_json,
30
31
  headers: headers)
31
32
 
@@ -35,7 +36,7 @@ module HubspotClient
35
36
  end
36
37
 
37
38
  def update(hubspot_id, properties)
38
- response = self.class.patch("#{BASE_PATH}/#{hubspot_id}",
39
+ response = self.class.patch("#{BASE_PATH_V3}/#{hubspot_id}",
39
40
  body: { properties: properties }.to_json,
40
41
  headers: headers)
41
42
 
@@ -44,6 +45,15 @@ module HubspotClient
44
45
  raise ContactNotUpdated, 'Hubspot could not update'
45
46
  end
46
47
 
48
+ def associate_with(hubspot_id, to_object_type, to_object_type_id, association_type = '1')
49
+ path = "#{BASE_PATH_V3}/#{hubspot_id}/associations/#{to_object_type}/#{to_object_type_id}/#{association_type}"
50
+ response = self.class.put(path, headers: headers)
51
+
52
+ return response if response.code == 200
53
+
54
+ raise AssociationError, response
55
+ end
56
+
47
57
  private
48
58
 
49
59
  def find_by(path)
@@ -20,7 +20,8 @@ module HubspotClient
20
20
  new(response['properties'])
21
21
  end
22
22
 
23
- def update
23
+ def update(new_properties = {})
24
+ assign_attributes(new_properties)
24
25
  properties = to_h.slice(*UPDATABLE_PROPERTIES)
25
26
  response = Client::Company.new.update(hs_object_id, properties)
26
27
 
@@ -37,6 +38,12 @@ module HubspotClient
37
38
 
38
39
  self
39
40
  end
41
+
42
+ def assign_attributes(attributes)
43
+ attributes.each do |attribute, value|
44
+ self[attribute] = value
45
+ end
46
+ end
40
47
  end
41
48
  end
42
49
  end
@@ -26,7 +26,8 @@ module HubspotClient
26
26
  new(response['properties'])
27
27
  end
28
28
 
29
- def update
29
+ def update(new_properties = {})
30
+ assign_attributes(new_properties)
30
31
  properties = to_h.slice(*UPDATABLE_PROPERTIES)
31
32
  response = Client::Contact.new.update(hs_object_id, properties)
32
33
 
@@ -47,6 +48,20 @@ module HubspotClient
47
48
  def primary_company
48
49
  @primary_company ||= Company.find(hubspot_id: associatedcompanyid)
49
50
  end
51
+
52
+ def associate_primary_company(hubspot_id)
53
+ response = Client::Contact.new.associate_with(hs_object_id, 'companies', hubspot_id)
54
+
55
+ return true if response.code == 200
56
+
57
+ false
58
+ end
59
+
60
+ def assign_attributes(attributes)
61
+ attributes.each do |attribute, value|
62
+ self[attribute] = value
63
+ end
64
+ end
50
65
  end
51
66
  end
52
67
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HubspotClient
4
- VERSION = '0.1.0.beta1'
4
+ VERSION = '0.1.0.beta2'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hubspot_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.beta1
4
+ version: 0.1.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garllon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-24 00:00:00.000000000 Z
11
+ date: 2022-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -152,6 +152,7 @@ files:
152
152
  - ".github/workflows/rspec_and_rubocop.yml"
153
153
  - ".gitignore"
154
154
  - ".rubocop.yml"
155
+ - CHANGELOG.md
155
156
  - Gemfile
156
157
  - Gemfile.lock
157
158
  - README.md
@@ -187,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
188
  - !ruby/object:Gem::Version
188
189
  version: 1.3.1
189
190
  requirements: []
190
- rubygems_version: 3.3.3
191
+ rubygems_version: 3.3.22
191
192
  signing_key:
192
193
  specification_version: 4
193
194
  summary: Hubspot client