hubspot_client 0.1.0.beta1 → 0.1.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
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