hubspot_client 0.1.0.beta1 → 0.1.0

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: 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