hubspot_client 0.1.0.beta1 → 0.1.0

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: 64366ba11cb24670e4a304a5a16307402736fe0f941f725535f148a37329afdc
4
+ data.tar.gz: d134c5b394c90e1b86d7cc716b20196289ba3c3c1b7768793d5d15fdca86ff0c
5
5
  SHA512:
6
- metadata.gz: b2f43fe74c400cc82d075ff771392431a55294418195a8514018d9b09a4dce169a0986d829967a0c7653b197ed744afff4267d013702bad2371b40f32bd4a59f
7
- data.tar.gz: edd7430e6c3cb224a56fbea5e4e59042c3bb752ac6c3616fbe5763f24f94fbf2cbd8e6cfb82015b49b03fa283c875582ba3f4beb12986125f9f9b8ba31ee8eeb
6
+ metadata.gz: 5be8964ed3c42cc2e01481da815de2d7f068ff1a4359f092ec1c89a864c761aa51c91cc6c79511004c685bcab19da1a8b7a81d0ec4cdf17b7ccc95de8fdb72b8
7
+ data.tar.gz: b27567094d0c0cfe0166ee7ae13b0c99012b2f127cddb62d5f703916b17e32864257a39892109360625c528239ddbc0961fbc3df369be1c89c1ded0e0ab6e906
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  .env
2
2
  .idea/
3
+ .ruby-version
data/.rubocop.yml CHANGED
@@ -4,4 +4,8 @@ Layout/LineLength:
4
4
  Max: 120
5
5
 
6
6
  Style/Documentation:
7
- Enabled: false
7
+ Enabled: false
8
+
9
+ Metrics/ModuleLength:
10
+ Exclude:
11
+ - 'spec/hubspot_client/model/contact_spec.rb'
data/CHANGELOG.md ADDED
@@ -0,0 +1,28 @@
1
+ ## 0.1.0 (2022-11-30)
2
+
3
+ ### Features
4
+ * add method for contact model to set communication preferences
5
+ * added communication preference client
6
+
7
+ ### Breaking Changes
8
+ None
9
+
10
+ ## 0.1.0.beta2 (2022-11-28)
11
+
12
+ ### Features
13
+ * Add associate company to contact logic
14
+ * Update README to make it more understanble
15
+
16
+ ### Breaking Changes
17
+ None
18
+
19
+ ## 0.1.0.beta1 (2022-11-25)
20
+
21
+ ### Features
22
+ * Add Company Model and Client
23
+ * Add primary_company method to Contact model
24
+ * Add Properties Client
25
+ * Add Matrix for RSpec tests and support for the moment Ruby 3.0 and 3.1
26
+
27
+ ## Breaking Changes
28
+ None
data/Gemfile CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
- # Specify your gem's dependencies in graphql_connector.gemspec
5
+ # Specify your gem's dependencies in hubspot_client.gemspec
6
6
  gemspec
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)
5
5
  httparty (~> 0.20.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -21,7 +21,7 @@ Or install it yourself as:
21
21
 
22
22
  ## Usage
23
23
 
24
- You need to configure the `graphql_connector` first:
24
+ You need to configure the `hubspot_client` first:
25
25
  ``` ruby
26
26
  HubspotClient.configure do |config|
27
27
  config.access_token = 'PRIVATE_APP_ACCESS_TOKEN'
@@ -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
 
@@ -7,8 +7,8 @@ require 'hubspot_client/version'
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = 'hubspot_client'
9
9
  spec.version = HubspotClient::VERSION
10
- spec.authors = %w[Garllon]
11
- spec.email = ['garllon@protonmail.com']
10
+ spec.authors = %w[Garllon romankonz]
11
+ spec.email = %w[garllon@protonmail.com roman@konz.me]
12
12
 
13
13
  spec.summary = 'Hubspot client'
14
14
  spec.description = 'Hubspot client to handle CRM objects.'
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HubspotClient
4
+ module Client
5
+ class SubscriptionNotSuccessful < StandardError; end
6
+ class FetchDefinitionsNotSuccessful < StandardError; end
7
+
8
+ class CommunicationPreference
9
+ include HTTParty
10
+ base_uri 'https://api.hubapi.com'
11
+
12
+ BASE_PATH = '/communication-preferences/v3'
13
+
14
+ def definitions
15
+ response = self.class.get("#{BASE_PATH}/definitions",
16
+ headers: headers)
17
+
18
+ return response if response.code == 200
19
+
20
+ raise FetchDefinitionsNotSuccessful
21
+ end
22
+
23
+ def subscribe(properties)
24
+ response = self.class.post("#{BASE_PATH}/subscribe",
25
+ body: properties.to_json,
26
+ headers: headers)
27
+
28
+ return response if response.code == 200
29
+
30
+ raise SubscriptionNotSuccessful
31
+ end
32
+
33
+ def headers
34
+ { Authorization: "Bearer #{HubspotClient.configuration.access_token}",
35
+ 'Content-Type': 'application/json' }
36
+ end
37
+ end
38
+ end
39
+ end
@@ -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)
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HubspotClient
4
+ module Model
5
+ class CommunicationPreference
6
+ def self.definitions
7
+ Client::CommunicationPreference.new.definitions
8
+ end
9
+ end
10
+ end
11
+ end
@@ -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
 
@@ -44,9 +45,35 @@ module HubspotClient
44
45
  self
45
46
  end
46
47
 
48
+ def create_communication_subscription(subscription_id:, legal_basis: nil, legal_basis_explanation: nil)
49
+ properties = {
50
+ emailAddress: email,
51
+ subscriptionId: subscription_id
52
+ }
53
+
54
+ properties[:legalBasis] = legal_basis if legal_basis
55
+ properties[:legalBasisExplanation] = legal_basis_explanation if legal_basis_explanation
56
+
57
+ Client::CommunicationPreference.new.subscribe(properties)
58
+ end
59
+
47
60
  def primary_company
48
61
  @primary_company ||= Company.find(hubspot_id: associatedcompanyid)
49
62
  end
63
+
64
+ def associate_primary_company(hubspot_id)
65
+ response = Client::Contact.new.associate_with(hs_object_id, 'companies', hubspot_id)
66
+
67
+ return true if response.code == 200
68
+
69
+ false
70
+ end
71
+
72
+ def assign_attributes(attributes)
73
+ attributes.each do |attribute, value|
74
+ self[attribute] = value
75
+ end
76
+ end
50
77
  end
51
78
  end
52
79
  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'
5
5
  end
@@ -1,13 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'httparty'
4
- require 'hubspot_client/version'
5
- require 'hubspot_client/configuration'
6
- require 'hubspot_client/client/contact'
4
+ require 'hubspot_client/client/communication_preference'
7
5
  require 'hubspot_client/client/company'
6
+ require 'hubspot_client/client/contact'
8
7
  require 'hubspot_client/client/properties'
9
- require 'hubspot_client/model/contact'
8
+ require 'hubspot_client/configuration'
9
+ require 'hubspot_client/model/communication_preference'
10
10
  require 'hubspot_client/model/company'
11
+ require 'hubspot_client/model/contact'
12
+ require 'hubspot_client/version'
11
13
 
12
14
  module HubspotClient
13
15
  class << self
metadata CHANGED
@@ -1,14 +1,15 @@
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
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garllon
8
+ - romankonz
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2022-11-24 00:00:00.000000000 Z
12
+ date: 2022-11-30 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: httparty
@@ -145,6 +146,7 @@ dependencies:
145
146
  description: Hubspot client to handle CRM objects.
146
147
  email:
147
148
  - garllon@protonmail.com
149
+ - roman@konz.me
148
150
  executables: []
149
151
  extensions: []
150
152
  extra_rdoc_files: []
@@ -152,16 +154,19 @@ files:
152
154
  - ".github/workflows/rspec_and_rubocop.yml"
153
155
  - ".gitignore"
154
156
  - ".rubocop.yml"
157
+ - CHANGELOG.md
155
158
  - Gemfile
156
159
  - Gemfile.lock
157
160
  - README.md
158
161
  - bin/console
159
162
  - hubspot_client.gemspec
160
163
  - lib/hubspot_client.rb
164
+ - lib/hubspot_client/client/communication_preference.rb
161
165
  - lib/hubspot_client/client/company.rb
162
166
  - lib/hubspot_client/client/contact.rb
163
167
  - lib/hubspot_client/client/properties.rb
164
168
  - lib/hubspot_client/configuration.rb
169
+ - lib/hubspot_client/model/communication_preference.rb
165
170
  - lib/hubspot_client/model/company.rb
166
171
  - lib/hubspot_client/model/contact.rb
167
172
  - lib/hubspot_client/version.rb
@@ -183,11 +188,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
183
188
  version: 3.0.0
184
189
  required_rubygems_version: !ruby/object:Gem::Requirement
185
190
  requirements:
186
- - - ">"
191
+ - - ">="
187
192
  - !ruby/object:Gem::Version
188
- version: 1.3.1
193
+ version: '0'
189
194
  requirements: []
190
- rubygems_version: 3.3.3
195
+ rubygems_version: 3.3.22
191
196
  signing_key:
192
197
  specification_version: 4
193
198
  summary: Hubspot client