hubspot-ruby 0.1.7 → 0.1.8
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 +4 -4
- data/hubspot-ruby.gemspec +42 -5
- data/lib/hubspot-ruby.rb +3 -0
- data/lib/hubspot/blog.rb +14 -48
- data/lib/hubspot/connection.rb +95 -0
- data/lib/hubspot/contact.rb +74 -91
- data/lib/hubspot/contact_list.rb +127 -0
- data/lib/hubspot/contact_properties.rb +12 -0
- data/lib/hubspot/deal.rb +29 -25
- data/lib/hubspot/exceptions.rb +2 -0
- data/lib/hubspot/form.rb +88 -4
- data/lib/hubspot/topic.rb +8 -24
- data/lib/hubspot/utils.rb +0 -51
- data/lib/hubspot/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/add_contacts_to_lists.yml +281 -0
- data/spec/fixtures/vcr_cassettes/contact_create.yml +34 -2
- data/spec/fixtures/vcr_cassettes/contact_create_existing_email.yml +34 -2
- data/spec/fixtures/vcr_cassettes/contact_create_invalid_email.yml +35 -3
- data/spec/fixtures/vcr_cassettes/contact_create_with_params.yml +34 -2
- data/spec/fixtures/vcr_cassettes/contact_destroy.yml +36 -4
- data/spec/fixtures/vcr_cassettes/contact_find_by_email_batch_mode.yml +509 -0
- data/spec/fixtures/vcr_cassettes/contact_find_by_id_batch_mode.yml +33 -0
- data/spec/fixtures/vcr_cassettes/contact_find_by_utk_batch_mode.yml +33 -0
- data/spec/fixtures/vcr_cassettes/contact_list_batch_find.yml +65 -0
- data/spec/fixtures/vcr_cassettes/contact_list_destroy.yml +63 -0
- data/spec/fixtures/vcr_cassettes/contact_list_example.yml +33 -0
- data/spec/fixtures/vcr_cassettes/contact_list_find.yml +96 -0
- data/spec/fixtures/vcr_cassettes/contact_list_refresh.yml +33 -0
- data/spec/fixtures/vcr_cassettes/contact_list_update.yml +36 -0
- data/spec/fixtures/vcr_cassettes/contacts_among_list.yml +189 -0
- data/spec/fixtures/vcr_cassettes/create_form.yml +39 -0
- data/spec/fixtures/vcr_cassettes/create_list.yml +36 -0
- data/spec/fixtures/vcr_cassettes/create_list_with_filters.yml +36 -0
- data/spec/fixtures/vcr_cassettes/deal_create.yml +29 -0
- data/spec/fixtures/vcr_cassettes/deal_find.yml +56 -0
- data/spec/fixtures/vcr_cassettes/destroy_deal.yml +110 -0
- data/spec/fixtures/vcr_cassettes/fail_to_create_form.yml +35 -0
- data/spec/fixtures/vcr_cassettes/fail_to_create_list.yml +35 -0
- data/spec/fixtures/vcr_cassettes/field_among_form.yml +34 -0
- data/spec/fixtures/vcr_cassettes/fields_among_form.yml +35 -0
- data/spec/fixtures/vcr_cassettes/find_all_contacts.yml +39 -0
- data/spec/fixtures/vcr_cassettes/find_all_dynamic_lists.yml +104 -0
- data/spec/fixtures/vcr_cassettes/find_all_forms.yml +15378 -0
- data/spec/fixtures/vcr_cassettes/find_all_lists.yml +138 -0
- data/spec/fixtures/vcr_cassettes/find_all_recent_contacts.yml +33 -0
- data/spec/fixtures/vcr_cassettes/find_all_stastic_lists.yml +21876 -0
- data/spec/fixtures/vcr_cassettes/form_destroy.yml +64 -0
- data/spec/fixtures/vcr_cassettes/form_example.yml +39 -0
- data/spec/fixtures/vcr_cassettes/form_find.yml +69 -0
- data/spec/fixtures/vcr_cassettes/form_submit_data.yml +130 -0
- data/spec/fixtures/vcr_cassettes/form_update.yml +77 -0
- data/spec/fixtures/vcr_cassettes/one_month_blog_posts_filter_state.yml +5168 -0
- data/spec/fixtures/vcr_cassettes/remove_contacts_from_lists.yml +315 -0
- data/spec/lib/hubspot/blog_spec.rb +4 -3
- data/spec/lib/hubspot/connection_spec.rb +112 -0
- data/spec/lib/hubspot/contact_list_spec.rb +249 -0
- data/spec/lib/hubspot/contact_properties_spec.rb +8 -0
- data/spec/lib/hubspot/contact_spec.rb +110 -54
- data/spec/lib/hubspot/deal_spec.rb +11 -0
- data/spec/lib/hubspot/form_spec.rb +157 -10
- data/spec/lib/hubspot/utils_spec.rb +0 -67
- data/spec/live/deals_integration_spec.rb +35 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/support/tests_helper.rb +17 -0
- metadata +70 -33
@@ -0,0 +1,127 @@
|
|
1
|
+
module Hubspot
|
2
|
+
#
|
3
|
+
# HubSpot Contact lists API
|
4
|
+
#
|
5
|
+
class ContactList
|
6
|
+
LISTS_PATH = '/contacts/v1/lists'
|
7
|
+
LIST_PATH = '/contacts/v1/lists/:list_id'
|
8
|
+
LIST_BATCH_PATH = LISTS_PATH + '/batch'
|
9
|
+
CONTACTS_PATH = LIST_PATH + '/contacts/all'
|
10
|
+
RECENT_CONTACTS_PATH = LIST_PATH + '/contacts/recent'
|
11
|
+
ADD_CONTACT_PATH = LIST_PATH + '/add'
|
12
|
+
REMOVE_CONTACT_PATH = LIST_PATH + '/remove'
|
13
|
+
REFRESH_PATH = LIST_PATH + '/refresh'
|
14
|
+
|
15
|
+
class << self
|
16
|
+
# {http://developers.hubspot.com/docs/methods/lists/create_list}
|
17
|
+
def create!(opts={})
|
18
|
+
dynamic = opts.delete(:dynamic) { false }
|
19
|
+
portal_id = opts.delete(:portal_id) { Hubspot::Config.portal_id }
|
20
|
+
|
21
|
+
response = Hubspot::Connection.post_json(LISTS_PATH, params: {}, body: opts.merge({ dynamic: dynamic, portal_id: portal_id}) )
|
22
|
+
new(response)
|
23
|
+
end
|
24
|
+
|
25
|
+
# {http://developers.hubspot.com/docs/methods/lists/get_lists}
|
26
|
+
# {http://developers.hubspot.com/docs/methods/lists/get_static_lists}
|
27
|
+
# {http://developers.hubspot.com/docs/methods/lists/get_dynamic_lists}
|
28
|
+
def all(opts={})
|
29
|
+
static = opts.delete(:static) { false }
|
30
|
+
dynamic = opts.delete(:dynamic) { false }
|
31
|
+
|
32
|
+
# NOTE: As opposed of what the documentation says, getting the static or dynamic lists returns all the lists, not only 20 lists
|
33
|
+
path = LISTS_PATH + (static ? '/static' : dynamic ? '/dynamic' : '')
|
34
|
+
response = Hubspot::Connection.get_json(path, opts)
|
35
|
+
response['lists'].map { |l| new(l) }
|
36
|
+
end
|
37
|
+
|
38
|
+
# {http://developers.hubspot.com/docs/methods/lists/get_list}
|
39
|
+
# {http://developers.hubspot.com/docs/methods/lists/get_batch_lists}
|
40
|
+
def find(ids)
|
41
|
+
batch_mode, path, params = case ids
|
42
|
+
when Integer then [false, LIST_PATH, { list_id: ids }]
|
43
|
+
when String then [false, LIST_PATH, { list_id: ids.to_i }]
|
44
|
+
when Array then [true, LIST_BATCH_PATH, { batch_list_id: ids.map(&:to_i) }]
|
45
|
+
else raise Hubspot::InvalidParams, 'expecting Integer or Array of Integers parameter'
|
46
|
+
end
|
47
|
+
|
48
|
+
response = Hubspot::Connection.get_json(path, params)
|
49
|
+
batch_mode ? response['lists'].map { |l| new(l) } : new(response)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
attr_reader :id
|
54
|
+
attr_reader :portal_id
|
55
|
+
attr_reader :name
|
56
|
+
attr_reader :dynamic
|
57
|
+
attr_reader :properties
|
58
|
+
|
59
|
+
def initialize(hash)
|
60
|
+
self.send(:assign_properties, hash)
|
61
|
+
end
|
62
|
+
|
63
|
+
# {http://developers.hubspot.com/docs/methods/lists/update_list}
|
64
|
+
def update!(opts={})
|
65
|
+
response = Hubspot::Connection.post_json(LIST_PATH, params: { list_id: @id }, body: opts)
|
66
|
+
self.send(:assign_properties, response)
|
67
|
+
self
|
68
|
+
end
|
69
|
+
|
70
|
+
# {http://developers.hubspot.com/docs/methods/lists/delete_list}
|
71
|
+
def destroy!
|
72
|
+
response = Hubspot::Connection.delete_json(LIST_PATH, { list_id: @id })
|
73
|
+
@destroyed = (response.code == 204)
|
74
|
+
end
|
75
|
+
|
76
|
+
# {http://developers.hubspot.com/docs/methods/lists/get_list_contacts}
|
77
|
+
def contacts(opts={})
|
78
|
+
# NOTE: caching functionality can be dependant of the nature of the list, if dynamic or not ...
|
79
|
+
bypass_cache = opts.delete(:bypass_cache) { false }
|
80
|
+
recent = opts.delete(:recent) { false }
|
81
|
+
|
82
|
+
if bypass_cache || @contacts.nil?
|
83
|
+
path = recent ? RECENT_CONTACTS_PATH : CONTACTS_PATH
|
84
|
+
opts[:list_id] = @id
|
85
|
+
|
86
|
+
response = Hubspot::Connection.get_json(path, Hubspot::ContactProperties.add_default_parameters(opts))
|
87
|
+
@contacts = response['contacts'].map { |c| Hubspot::Contact.new(c) }
|
88
|
+
else
|
89
|
+
@contacts
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# {http://developers.hubspot.com/docs/methods/lists/refresh_list}
|
94
|
+
def refresh
|
95
|
+
response = Hubspot::Connection.post_json(REFRESH_PATH, params: { list_id: @id, no_parse: true }, body: {})
|
96
|
+
response.code == 204
|
97
|
+
end
|
98
|
+
|
99
|
+
# {http://developers.hubspot.com/docs/methods/lists/add_contact_to_list}
|
100
|
+
def add(contacts)
|
101
|
+
contact_ids = [contacts].flatten.uniq.compact.map(&:vid)
|
102
|
+
response = Hubspot::Connection.post_json(ADD_CONTACT_PATH, params: { list_id: @id }, body: { vids: contact_ids })
|
103
|
+
response['updated'].sort == contact_ids.sort
|
104
|
+
end
|
105
|
+
|
106
|
+
# {http://developers.hubspot.com/docs/methods/lists/remove_contact_from_list}
|
107
|
+
def remove(contacts)
|
108
|
+
contact_ids = [contacts].flatten.uniq.compact.map(&:vid)
|
109
|
+
response = Hubspot::Connection.post_json(REMOVE_CONTACT_PATH, params: { list_id: @id }, body: { vids: contact_ids })
|
110
|
+
response['updated'].sort == contact_ids.sort
|
111
|
+
end
|
112
|
+
|
113
|
+
def destroyed?
|
114
|
+
!!@destroyed
|
115
|
+
end
|
116
|
+
|
117
|
+
private
|
118
|
+
|
119
|
+
def assign_properties(hash)
|
120
|
+
@id = hash['listId']
|
121
|
+
@portal_id = hash['portalId']
|
122
|
+
@name = hash['name']
|
123
|
+
@dynamic = hash['dynamic']
|
124
|
+
@properties = hash
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Hubspot
|
2
|
+
class ContactProperties
|
3
|
+
class << self
|
4
|
+
# TODO: properties can be set as configuration
|
5
|
+
# TODO: find the way how to set a list of Properties + merge same property key if present from opts
|
6
|
+
def add_default_parameters(opts={})
|
7
|
+
properties = 'email'
|
8
|
+
opts.merge(property: properties)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/hubspot/deal.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'hubspot/utils'
|
2
|
-
require 'httparty'
|
3
2
|
|
4
3
|
module Hubspot
|
5
4
|
#
|
@@ -8,6 +7,10 @@ module Hubspot
|
|
8
7
|
# {http://developers.hubspot.com/docs/methods/deals/deals_overview}
|
9
8
|
#
|
10
9
|
class Deal
|
10
|
+
CREATE_DEAL_PATH = "/deals/v1/deal"
|
11
|
+
DEAL_PATH = "/deals/v1/deal/:deal_id"
|
12
|
+
RECENT_UPDATED_PATH = "/deals/v1/deal/recent/modified"
|
13
|
+
UPDATE_DEAL_PATH = '/deals/v1/deal/:deal_id'
|
11
14
|
|
12
15
|
attr_reader :properties
|
13
16
|
attr_reader :portal_id
|
@@ -15,10 +18,6 @@ module Hubspot
|
|
15
18
|
attr_reader :company_ids
|
16
19
|
attr_reader :vids
|
17
20
|
|
18
|
-
CREATE_DEAL_PATH = "/deals/v1/deal"
|
19
|
-
DEAL_PATH = "/deals/v1/deal/:deal_id"
|
20
|
-
RECENT_UPDATED_PATH = "/deals/v1/deal/recent/modified"
|
21
|
-
|
22
21
|
def initialize(response_hash)
|
23
22
|
@portal_id = response_hash["portalId"]
|
24
23
|
@deal_id = response_hash["dealId"]
|
@@ -29,21 +28,17 @@ module Hubspot
|
|
29
28
|
|
30
29
|
class << self
|
31
30
|
def create!(portal_id, company_ids, vids, params={})
|
32
|
-
|
31
|
+
#TODO: clean following hash, Hubspot::Utils should do the trick
|
33
32
|
associations_hash = {"portalId" => portal_id, "associations" => { "associatedCompanyIds" => company_ids, "associatedVids" => vids}}
|
34
33
|
post_data = associations_hash.merge({ properties: Hubspot::Utils.hash_to_properties(params, key_name: "name") })
|
35
|
-
|
36
|
-
Hubspot::
|
34
|
+
|
35
|
+
response = Hubspot::Connection.post_json(CREATE_DEAL_PATH, params: {}, body: post_data )
|
36
|
+
new(response)
|
37
37
|
end
|
38
38
|
|
39
39
|
def find(deal_id)
|
40
|
-
|
41
|
-
|
42
|
-
if resp.success?
|
43
|
-
Hubspot::Deal.new(resp.parsed_response)
|
44
|
-
else
|
45
|
-
nil
|
46
|
-
end
|
40
|
+
response = Hubspot::Connection.get_json(DEAL_PATH, { deal_id: deal_id })
|
41
|
+
new(response)
|
47
42
|
end
|
48
43
|
|
49
44
|
# Find recent updated deals.
|
@@ -51,28 +46,37 @@ module Hubspot
|
|
51
46
|
# @param count [Integer] the amount of deals to return.
|
52
47
|
# @param offset [Integer] pages back through recent contacts.
|
53
48
|
def recent(opts = {})
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
raise(Hubspot::RequestError.new(request)) unless request.success?
|
58
|
-
|
59
|
-
found = request.parsed_response['results']
|
60
|
-
return found.map{|h| new(h) }
|
49
|
+
response = Hubspot::Connection.get_json(RECENT_UPDATED_PATH, opts)
|
50
|
+
response['results'].map { |d| new(d) }
|
61
51
|
end
|
52
|
+
|
62
53
|
end
|
63
54
|
|
64
55
|
# Archives the contact in hubspot
|
65
56
|
# {https://developers.hubspot.com/docs/methods/contacts/delete_contact}
|
66
57
|
# @return [TrueClass] true
|
67
58
|
def destroy!
|
68
|
-
|
69
|
-
request = HTTParty.delete(url, format: :json)
|
70
|
-
raise(Hubspot::RequestError.new(request)) unless request.success?
|
59
|
+
response = Hubspot::Connection.delete_json(DEAL_PATH, {deal_id: deal_id})
|
71
60
|
@destroyed = true
|
72
61
|
end
|
73
62
|
|
74
63
|
def destroyed?
|
75
64
|
!!@destroyed
|
76
65
|
end
|
66
|
+
|
67
|
+
def [](property)
|
68
|
+
@properties[property]
|
69
|
+
end
|
70
|
+
|
71
|
+
# Updates the properties of a deal
|
72
|
+
# {https://developers.hubspot.com/docs/methods/deals/update_deal}
|
73
|
+
# @param params [Hash] hash of properties to update
|
74
|
+
# @return [Hubspot::Deal] self
|
75
|
+
def update!(params)
|
76
|
+
query = {"properties" => Hubspot::Utils.hash_to_properties(params.stringify_keys!, key_name: 'name')}
|
77
|
+
response = Hubspot::Connection.put_json(UPDATE_DEAL_PATH, params: { deal_id: deal_id }, body: query)
|
78
|
+
@properties.merge!(params)
|
79
|
+
self
|
80
|
+
end
|
77
81
|
end
|
78
82
|
end
|
data/lib/hubspot/exceptions.rb
CHANGED
data/lib/hubspot/form.rb
CHANGED
@@ -1,11 +1,95 @@
|
|
1
1
|
module Hubspot
|
2
|
+
#
|
3
|
+
# HubSpot Form API
|
4
|
+
#
|
5
|
+
# {https://developers.hubspot.com/docs/methods/forms/forms_overview}
|
6
|
+
#
|
2
7
|
class Form
|
3
|
-
|
4
|
-
|
8
|
+
FORMS_PATH = '/contacts/v1/forms'
|
9
|
+
FORM_PATH = '/contacts/v1/forms/:form_guid'
|
10
|
+
FIELDS_PATH = '/contacts/v1/fields/:form_guid'
|
11
|
+
FIELD_PATH = FIELDS_PATH + '/:field_name'
|
12
|
+
SUBMIT_DATA_PATH = '/uploads/form/v2/:portal_id/:form_guid'
|
13
|
+
|
14
|
+
class << self
|
15
|
+
# {https://developers.hubspot.com/docs/methods/forms/create_form}
|
16
|
+
def create!(opts={})
|
17
|
+
response = Hubspot::Connection.post_json(FORMS_PATH, params: {}, body: opts)
|
18
|
+
new(response)
|
19
|
+
end
|
20
|
+
|
21
|
+
def all
|
22
|
+
response = Hubspot::Connection.get_json(FORMS_PATH, {})
|
23
|
+
response.map { |f| new(f) }
|
24
|
+
end
|
25
|
+
|
26
|
+
# {https://developers.hubspot.com/docs/methods/forms/get_form}
|
27
|
+
def find(guid)
|
28
|
+
response = Hubspot::Connection.get_json(FORM_PATH, { form_guid: guid })
|
29
|
+
new(response)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
attr_reader :guid
|
34
|
+
attr_reader :fields
|
35
|
+
attr_reader :properties
|
36
|
+
|
37
|
+
def initialize(hash)
|
38
|
+
self.send(:assign_properties, hash)
|
39
|
+
end
|
40
|
+
|
41
|
+
# {https://developers.hubspot.com/docs/methods/forms/get_fields}
|
42
|
+
# {https://developers.hubspot.com/docs/methods/forms/get_field}
|
43
|
+
def fields(opts={})
|
44
|
+
bypass_cache = opts.delete(:bypass_cache) { false }
|
45
|
+
field_name = opts.delete(:only) { nil }
|
46
|
+
|
47
|
+
if field_name
|
48
|
+
field_name = field_name.to_s
|
49
|
+
if bypass_cache || @fields.nil? || @fields.empty?
|
50
|
+
response = Hubspot::Connection.get_json(FIELD_PATH, { form_guid: @guid, field_name: field_name })
|
51
|
+
response
|
52
|
+
else
|
53
|
+
@fields.detect { |f| f['name'] == field_name }
|
54
|
+
end
|
55
|
+
else
|
56
|
+
if bypass_cache || @fields.nil? || @fields.empty?
|
57
|
+
response = Hubspot::Connection.get_json(FIELDS_PATH, { form_guid: @guid })
|
58
|
+
@fields = response
|
59
|
+
end
|
60
|
+
@fields
|
61
|
+
end
|
5
62
|
end
|
63
|
+
|
64
|
+
# {https://developers.hubspot.com/docs/methods/forms/submit_form}
|
65
|
+
def submit(opts={})
|
66
|
+
response = Hubspot::FormsConnection.submit(SUBMIT_DATA_PATH, params: { form_guid: @guid }, body: opts)
|
67
|
+
[204, 302].include?(response.code)
|
68
|
+
end
|
69
|
+
|
70
|
+
# {https://developers.hubspot.com/docs/methods/forms/update_form}
|
71
|
+
def update!(opts={})
|
72
|
+
response = Hubspot::Connection.post_json(FORM_PATH, params: { form_guid: @guid }, body: opts)
|
73
|
+
self.send(:assign_properties, response)
|
74
|
+
self
|
75
|
+
end
|
76
|
+
|
77
|
+
# {https://developers.hubspot.com/docs/methods/forms/delete_form}
|
78
|
+
def destroy!
|
79
|
+
response = Hubspot::Connection.delete_json(FORM_PATH, { form_guid: @guid })
|
80
|
+
@destroyed = (response.code == 204)
|
81
|
+
end
|
82
|
+
|
83
|
+
def destroyed?
|
84
|
+
!!@destroyed
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
6
88
|
|
7
|
-
def
|
8
|
-
|
89
|
+
def assign_properties(hash)
|
90
|
+
@guid = hash['guid']
|
91
|
+
@fields = hash['fields']
|
92
|
+
@properties = hash
|
9
93
|
end
|
10
94
|
end
|
11
95
|
end
|
data/lib/hubspot/topic.rb
CHANGED
@@ -1,42 +1,26 @@
|
|
1
|
-
require 'hubspot/utils'
|
2
|
-
require 'httparty'
|
3
|
-
|
4
1
|
module Hubspot
|
5
2
|
#
|
6
3
|
# HubSpot Topics API
|
7
4
|
#
|
8
5
|
class Topic
|
9
|
-
|
10
|
-
|
6
|
+
TOPICS_PATH = "/content/api/v2/topics"
|
7
|
+
TOPIC_PATH = "/content/api/v2/topics/:topic_id"
|
11
8
|
|
12
9
|
class << self
|
13
10
|
# Lists the topics
|
14
11
|
# {https://developers.hubspot.com/docs/methods/blogv2/get_topics)
|
15
|
-
# @return [Hubspot::Topic
|
12
|
+
# @return [Hubspot::Topic] array of topics
|
16
13
|
def list
|
17
|
-
|
18
|
-
|
19
|
-
if resp.success?
|
20
|
-
resp.parsed_response['objects'].map do |topic_hash|
|
21
|
-
Topic.new(topic_hash)
|
22
|
-
end
|
23
|
-
else
|
24
|
-
[]
|
25
|
-
end
|
14
|
+
response = Hubspot::Connection.get_json(TOPICS_PATH, {})
|
15
|
+
response['objects'].map { |t| new(t) }
|
26
16
|
end
|
27
17
|
|
28
18
|
# Finds the details for a specific topic_id
|
29
19
|
# {https://developers.hubspot.com/docs/methods/blogv2/get_topics_topic_id }
|
30
|
-
# @return Hubspot::Topic
|
31
|
-
|
20
|
+
# @return Hubspot::Topic
|
32
21
|
def find_by_topic_id(id)
|
33
|
-
|
34
|
-
|
35
|
-
if resp.success?
|
36
|
-
Topic.new(resp.parsed_response)
|
37
|
-
else
|
38
|
-
nil
|
39
|
-
end
|
22
|
+
response = Hubspot::Connection.get_json(TOPIC_PATH, { topic_id: id })
|
23
|
+
new(response)
|
40
24
|
end
|
41
25
|
end
|
42
26
|
|
data/lib/hubspot/utils.rb
CHANGED
@@ -13,57 +13,6 @@ module Hubspot
|
|
13
13
|
key_name = opts[:key_name] || "property"
|
14
14
|
hash.map{ |k,v| { key_name => k.to_s, "value" => v}}
|
15
15
|
end
|
16
|
-
|
17
|
-
# Generate the API URL for the request
|
18
|
-
#
|
19
|
-
# @param path [String] The path of the request with leading "/". Parts starting with a ":" will be interpolated
|
20
|
-
# @param params [Hash] params to be included in the query string or interpolated into the url.
|
21
|
-
#
|
22
|
-
# @return [String]
|
23
|
-
#
|
24
|
-
def generate_url(path, params={}, options={})
|
25
|
-
Hubspot::Config.ensure! :hapikey
|
26
|
-
path = path.clone
|
27
|
-
params = params.clone
|
28
|
-
base_url = options[:base_url] || Hubspot::Config.base_url
|
29
|
-
params["hapikey"] = Hubspot::Config.hapikey unless options[:hapikey] == false
|
30
|
-
|
31
|
-
if path =~ /:portal_id/
|
32
|
-
Hubspot::Config.ensure! :portal_id
|
33
|
-
params["portal_id"] = Hubspot::Config.portal_id if path =~ /:portal_id/
|
34
|
-
end
|
35
|
-
|
36
|
-
params.each do |k,v|
|
37
|
-
if path.match(":#{k}")
|
38
|
-
path.gsub!(":#{k}",v.to_s)
|
39
|
-
params.delete(k)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
raise(Hubspot::MissingInterpolation.new("Interpolation not resolved")) if path =~ /:/
|
43
|
-
query = params.map{ |k,v| param_string(k,v) }.join("&")
|
44
|
-
path += "?" if query.present?
|
45
|
-
base_url + path + query
|
46
|
-
end
|
47
|
-
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
def converted_value(value)
|
52
|
-
if (value.is_a?(Time))
|
53
|
-
(value.to_i * 1000) # convert into milliseconds since epoch
|
54
|
-
else
|
55
|
-
value
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def param_string(key,value)
|
60
|
-
if (key =~ /range/)
|
61
|
-
raise "Value must be a range" unless value.is_a?(Range)
|
62
|
-
"#{key}=#{converted_value(value.begin)}&#{key}=#{converted_value(value.end)}"
|
63
|
-
else
|
64
|
-
"#{key}=#{converted_value(value)}"
|
65
|
-
end
|
66
|
-
end
|
67
16
|
end
|
68
17
|
end
|
69
18
|
end
|