Class: Hubspot::Contact

Inherits:
Resource show all
Defined in:
lib/hubspot/contact.rb

Constant Summary collapse

ALL_PATH =
'/crm/v3/objects/contacts'
CREATE_PATH =
'/contacts/v1/contact'
CREATE_OR_UPDATE_PATH =
'/contacts/v1/contact/createOrUpdate/email/:email'
DELETE_PATH =
'/contacts/v1/contact/vid/:id'
FIND_PATH =
'/contacts/v1/contact/vid/:id/profile'
FIND_BY_EMAIL_PATH =
'/contacts/v1/contact/email/:email/profile'
FIND_BY_USER_TOKEN_PATH =
'/contacts/v1/contact/utk/:token/profile'
MERGE_PATH =
'/contacts/v1/contact/merge-vids/:id/'
SEARCH_PATH =
'/contacts/v1/search/query'
UPDATE_PATH =
'/contacts/v1/contact/vid/:id/profile'
BATCH_UPDATE_PATH =
'/contacts/v1/contact/batch'

Instance Attribute Summary

Attributes inherited from Resource

#changes, #id, #metadata, #properties

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Resource

#[], #changed?, create_path, #delete, delete_path, #deleted?, find, find_path, from_result, #initialize, #persisted?, #reload, #save, #to_i, update, #update, update!, update_path

Constructor Details

This class inherits a constructor from Hubspot::Resource

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Hubspot::Resource

Class Method Details

.all(opts = {}) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/hubspot/contact.rb', line 18

def all(opts = {})
  Hubspot::PagedCollection.new(opts) do |options, after, limit|
    request_options = options.merge(limit:)
    request_options[:after] = after if after.present?
    response = Hubspot::Connection.get_json(ALL_PATH, request_options)

    contacts = response['results'].map do |result| 
      from_result result, id_field: Hubspot::Resource.id_field 
    end
    after = response.dig('paging', 'next', 'after')
    [contacts, after, after.present?]
  end
end

.batch_update(contacts, opts = {}) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/hubspot/contact.rb', line 82

def batch_update(contacts, opts = {})
  request = contacts.map do |contact|
    # Use the specified options or update with the changes
    changes = opts.empty? ? contact.changes : opts

    next if changes.empty?

    {
      'vid' => contact.id,
      'properties' => changes.map { |k, v| { 'property' => k, 'value' => v } }
    }
  end

  # Remove any objects without changes and return if there is nothing to update
  request.compact!
  return true if request.empty?

  Hubspot::Connection.post_json(
    BATCH_UPDATE_PATH,
    params: {},
    body: request
  )

  true
end

.create(email, properties = {}) ⇒ Object



48
49
50
# File 'lib/hubspot/contact.rb', line 48

def create(email, properties = {})
  super(properties.merge('email' => email))
end

.create_or_update(email, properties = {}) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/hubspot/contact.rb', line 52

def create_or_update(email, properties = {})
  request = {
    properties: Hubspot::Utils.hash_to_properties(properties.stringify_keys, key_name: 'property')
  }
  response = Hubspot::Connection.post_json(CREATE_OR_UPDATE_PATH, params: { email: email }, body: request)
  from_result(response)
end

.find_by_email(email) ⇒ Object



37
38
39
40
# File 'lib/hubspot/contact.rb', line 37

def find_by_email(email)
  response = Hubspot::Connection.get_json(FIND_BY_EMAIL_PATH, email: email)
  from_result(response)
end

.find_by_user_token(token) ⇒ Object Also known as: find_by_utk



42
43
44
45
# File 'lib/hubspot/contact.rb', line 42

def find_by_user_token(token)
  response = Hubspot::Connection.get_json(FIND_BY_USER_TOKEN_PATH, token: token)
  from_result(response)
end

.find_by_vid(vid) ⇒ Object



32
33
34
35
# File 'lib/hubspot/contact.rb', line 32

def find_by_vid(vid)
  response = Hubspot::Connection.get_json(FIND_PATH, id: vid)
  from_result(response)
end

.merge(primary, secondary) ⇒ Object



72
73
74
75
76
77
78
79
80
# File 'lib/hubspot/contact.rb', line 72

def merge(primary, secondary)
  Hubspot::Connection.post_json(
    MERGE_PATH,
    params: { id: primary.to_i, no_parse: true },
    body: { 'vidToMerge' => secondary.to_i }
  )

  true
end

.search(query, opts = {}) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/hubspot/contact.rb', line 60

def search(query, opts = {})
  Hubspot::PagedCollection.new(opts) do |options, offset, limit|
    response = Hubspot::Connection.get_json(
      SEARCH_PATH,
      options.merge(q: query, offset: offset, count: limit)
    )

    contacts = response['contacts'].map { |result| from_result(result) }
    [contacts, response['offset'], response['has-more']]
  end
end

Instance Method Details

#merge(contact) ⇒ Object



113
114
115
# File 'lib/hubspot/contact.rb', line 113

def merge(contact)
  self.class.merge(@id, contact.to_i)
end

#nameObject



109
110
111
# File 'lib/hubspot/contact.rb', line 109

def name
  [firstname, lastname].compact.join(' ')
end