hubspot-ruby 0.3.0 → 0.4.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
  SHA1:
3
- metadata.gz: 1ab6604b85e4945f699f88491ad18191a9ceda03
4
- data.tar.gz: 8b01545c2f8c6d5e51d610233abcd55b2d9027d0
3
+ metadata.gz: f3a1711f64e0786c4ea7fea3ae863130e3f8a3d5
4
+ data.tar.gz: 7c350471fe6a943453353c4a54021a104abb6b1b
5
5
  SHA512:
6
- metadata.gz: a5b5d2e3c28f811c44b14e232e308cc2af19cf4050f6963dfa00ce7c0b59022c73fde892adf9e7fe0a5a73cb6d067b512cefdae13510b06164dd0630e4430b63
7
- data.tar.gz: 3381873ef4e85c46cbf4a17608c66c29414fa40fdf911fb7463a58be117f7a307b06905d3db269f5a56f8d98b68f70f4ed632a6816a7c8d6ffb6801af7770281
6
+ metadata.gz: dbf007dcda9eed037c323f4f9209b9cfed55926458b923fc9a7bbf95c88cf5ef0bd7e01857affd32c8d8d4649613ebfa1a614d84897ec8e9ba7ca4398550c615
7
+ data.tar.gz: 96a5651da299bdd400c02da77be240d76aecdf7acc72bc1c6e93b9dd6b24fbb3653dcbbb8da09413b83a90c6bc4c0557ef4a5dfa0c06c3fcb0e6b536a895c9b6
@@ -1,8 +1,8 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "hubspot-ruby"
3
- s.version = "0.3.0"
3
+ s.version = "0.4.0"
4
4
  s.require_paths = ["lib"]
5
- s.authors = ["Andrew DiMichele"]
5
+ s.authors = ["Andrew DiMichele", "Chris Bisnett"]
6
6
  s.description = "hubspot-ruby is a wrapper for the HubSpot REST API"
7
7
  s.files = [".rspec", "Gemfile", "Guardfile", "LICENSE.txt", "README.md", "RELEASING.md", "Rakefile", "hubspot-ruby.gemspec"]
8
8
  s.files += Dir["lib/**/*.rb"]
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.add_runtime_dependency "httparty", ">=0.10.0"
17
17
 
18
18
  # Add development-only dependencies here
19
- s.add_development_dependency("rake")
19
+ s.add_development_dependency("rake", "~> 11.0")
20
20
  s.add_development_dependency("rspec", "~> 2.0")
21
21
  s.add_development_dependency("rr")
22
22
  s.add_development_dependency("webmock", "< 1.10")
@@ -9,7 +9,7 @@ module Hubspot
9
9
  RECENTLY_CREATED_COMPANIES_PATH = "/companies/v2/companies/recent/created"
10
10
  RECENTLY_MODIFIED_COMPANIES_PATH = "/companies/v2/companies/recent/modified"
11
11
  GET_COMPANY_BY_ID_PATH = "/companies/v2/companies/:company_id"
12
- GET_COMPANY_BY_DOMAIN_PATH = "/companies/v2/companies/domain/:domain"
12
+ GET_COMPANY_BY_DOMAIN_PATH = "/companies/v2/domains/:domain/companies"
13
13
  UPDATE_COMPANY_PATH = "/companies/v2/companies/:company_id"
14
14
  ADD_CONTACT_TO_COMPANY_PATH = "/companies/v2/companies/:company_id/contacts/:vid"
15
15
  DESTROY_COMPANY_PATH = "/companies/v2/companies/:company_id"
@@ -39,18 +39,35 @@ module Hubspot
39
39
  end
40
40
 
41
41
  # Finds a list of companies by domain
42
- # {http://developers.hubspot.com/docs/methods/companies/get_companies_by_domain}
42
+ # {https://developers.hubspot.com/docs/methods/companies/search_companies_by_domain}
43
43
  # @param domain [String] company domain to search by
44
+ # @param options [Hash] Possible options are:
45
+ # limit [Integer] for pagination
46
+ # properties [Array] list of company properties to recieve
47
+ # offset_company_id [Integer] for pagination (should be company ID)
44
48
  # @return [Array] Array of Hubspot::Company records
45
- def find_by_domain(domain)
46
- path = GET_COMPANY_BY_DOMAIN_PATH
47
- params = { domain: domain }
48
- raise Hubspot::InvalidParams, 'expecting Integer parameter' unless domain.try(:is_a?, String)
49
+ def find_by_domain(domain, options = {})
50
+ raise Hubspot::InvalidParams, 'expecting String parameter' unless domain.try(:is_a?, String)
51
+
52
+ limit = options.fetch(:limit, 100)
53
+ properties = options.fetch(:properties) { Hubspot::CompanyProperties.all.map { |property| property["name"] } }
54
+ offset_company_id = options.fetch(:offset_company_id, nil)
55
+
56
+ post_data = {
57
+ "limit" => limit,
58
+ "requestOptions" => {
59
+ "properties" => properties
60
+ }
61
+ }
62
+ post_data["offset"] = {
63
+ "isPrimary" => true,
64
+ "companyId" => offset_company_id
65
+ } if offset_company_id
49
66
 
50
67
  companies = []
51
68
  begin
52
- response = Hubspot::Connection.get_json(path, params)
53
- companies = response.try(:map) { |company| new(company) }
69
+ response = Hubspot::Connection.post_json(GET_COMPANY_BY_DOMAIN_PATH, params: { domain: domain }, body: post_data )
70
+ companies = response["results"].try(:map) { |company| new(company) }
54
71
  rescue => e
55
72
  raise e unless e.message =~ /not found/ # 404 / hanle the error and kindly return an empty array
56
73
  end
@@ -18,6 +18,7 @@ module Hubspot
18
18
  DESTROY_CONTACT_PATH = '/contacts/v1/contact/vid/:contact_id'
19
19
  CONTACTS_PATH = '/contacts/v1/lists/all/contacts/all'
20
20
  RECENTLY_UPDATED_PATH = '/contacts/v1/lists/recently_updated/contacts/recent'
21
+ RECENTLY_CREATED_PATH = '/contacts/v1/lists/all/contacts/recent'
21
22
  CREATE_OR_UPDATE_PATH = '/contacts/v1/contact/createOrUpdate/email/:contact_email'
22
23
  QUERY_PATH = '/contacts/v1/search/query'
23
24
 
@@ -33,11 +34,15 @@ module Hubspot
33
34
 
34
35
  # {https://developers.hubspot.com/docs/methods/contacts/get_contacts}
35
36
  # {https://developers.hubspot.com/docs/methods/contacts/get_recently_updated_contacts}
37
+ # {https://developers.hubspot.com/docs/methods/contacts/get_recently_created_contacts}
36
38
  def all(opts={})
37
39
  recent = opts.delete(:recent) { false }
40
+ recent_created = opts.delete(:recent_created) { false }
38
41
  paged = opts.delete(:paged) { false }
39
42
  path, opts =
40
- if recent
43
+ if recent_created
44
+ [RECENTLY_CREATED_PATH, Hubspot::ContactProperties.add_default_parameters(opts)]
45
+ elsif recent
41
46
  [RECENTLY_UPDATED_PATH, Hubspot::ContactProperties.add_default_parameters(opts)]
42
47
  else
43
48
  [CONTACTS_PATH, opts]
@@ -5,7 +5,7 @@ module Hubspot
5
5
  group_field_names: %w(name displayName displayOrder properties),
6
6
  field_names: %w(name groupName description fieldType formField type displayOrder label options showCurrencySymbol),
7
7
  valid_field_types: %w(textarea select text date file number radio checkbox booleancheckbox),
8
- valid_types: %w(string number bool datetime enumeration),
8
+ valid_types: %w(string number bool date datetime enumeration),
9
9
  options: %w(description value label hidden displayOrder)
10
10
  }
11
11
  DEFAULT_PROPERTY = 'email'
@@ -62,17 +62,41 @@ describe Hubspot::Contact do
62
62
  describe ".find_by_domain" do
63
63
  context 'given a domain' do
64
64
  cassette "company_find_by_domain"
65
- subject{ Hubspot::Company.find_by_domain("hubspot.com") }
65
+ subject(:companies) { Hubspot::Company.find_by_domain("example.com") }
66
66
 
67
67
  context "when a company is found" do
68
- it{ should be_an_instance_of Array }
69
- it{ should_not be_empty }
68
+ it { should be_an_instance_of Array }
69
+ it { should_not be_empty }
70
+
71
+ it 'must contain all available properties' do
72
+ companies[0..9].each do |company|
73
+ expect(company.properties).to eql Hubspot::Company.find_by_id(company.vid).properties
74
+ end
75
+ end
70
76
  end
71
77
 
72
78
  context "when a company cannot be found" do
73
- subject{Hubspot::Company.find_by_domain("asdf1234baddomain.com")}
79
+ subject { Hubspot::Company.find_by_domain("asdf1234baddomain.com") }
80
+ it { should be_an_instance_of Array }
81
+ it { should be_empty }
82
+ end
83
+ end
84
+
85
+ context 'given a domain and parameters' do
86
+ cassette 'company_find_by_domain_with_params'
87
+ subject(:companies) { Hubspot::Company.find_by_domain("example.com", limit: 2, properties: ["name", "createdate"], offset_company_id: 117004411) }
88
+
89
+ context "when a company is found" do
74
90
  it{ should be_an_instance_of Array }
75
- it{ should be_empty }
91
+ it{ should_not be_empty }
92
+
93
+ it 'must use the parameters to search' do
94
+ expect(companies.size).to eql 2
95
+ expect(companies.first['name']).to be_a_kind_of String
96
+ expect(companies.first['createdate']).to be_a_kind_of String
97
+ expect(companies.first['domain']).to be_nil
98
+ expect(companies.first['hs_lastmodifieddate']).to be_nil
99
+ end
76
100
  end
77
101
  end
78
102
  end
@@ -318,6 +318,22 @@ describe Hubspot::Contact do
318
318
  expect(last.vid).to eql 263776
319
319
  end
320
320
  end
321
+
322
+ context 'recent created contacts' do
323
+ cassette 'find_all_recent_created_contacts'
324
+
325
+ it 'must get the contacts list' do
326
+ contacts = Hubspot::Contact.all(recent_created: true)
327
+ expect(contacts.size).to eql 20
328
+
329
+ first, last = contacts.first, contacts.last
330
+ expect(first).to be_a Hubspot::Contact
331
+ expect(first.vid).to eql 5478174
332
+
333
+ expect(last).to be_a Hubspot::Contact
334
+ expect(last.vid).to eql 5476674
335
+ end
336
+ end
321
337
  end
322
338
 
323
339
  describe '#update!' do
@@ -1,7 +1,12 @@
1
1
  describe Hubspot::Deal do
2
+ let(:portal_id) { 62515 }
3
+ let(:company_id) { 8954037 }
4
+ let(:vid) { 27136 }
5
+ let(:amount) { '30' }
6
+
2
7
  let(:example_deal_hash) do
3
8
  VCR.use_cassette("deal_example") do
4
- HTTParty.get("https://api.hubapi.com/deals/v1/deal/3?hapikey=demo&portalId=62515").parsed_response
9
+ HTTParty.get("https://api.hubapi.com/deals/v1/deal/3?hapikey=demo&portalId=#{portal_id}").parsed_response
5
10
  end
6
11
  end
7
12
 
@@ -10,27 +15,39 @@ describe Hubspot::Deal do
10
15
  describe "#initialize" do
11
16
  subject{ Hubspot::Deal.new(example_deal_hash) }
12
17
  it { should be_an_instance_of Hubspot::Deal }
13
- its (:portal_id) { should == 62515 }
18
+ its (:portal_id) { should == portal_id }
14
19
  its (:deal_id) { should == 3 }
15
20
  end
16
21
 
17
22
  describe ".create!" do
18
23
  cassette "deal_create"
19
- subject { Hubspot::Deal.create!(62515, [8954037], [27136], {}) }
24
+ subject { Hubspot::Deal.create!(portal_id, [company_id], [vid], {}) }
20
25
  its(:deal_id) { should_not be_nil }
21
- its(:portal_id) { should eql 62515 }
22
- its(:company_ids) { should eql [8954037]}
23
- its(:vids) { should eql [27136]}
26
+ its(:portal_id) { should eql portal_id }
27
+ its(:company_ids) { should eql [company_id]}
28
+ its(:vids) { should eql [vid]}
24
29
  end
25
30
 
26
31
  describe ".find" do
27
32
  cassette "deal_find"
28
- let(:deal) {Hubspot::Deal.create!(62515, [8954037], [27136], { amount: 30})}
33
+ let(:deal) {Hubspot::Deal.create!(portal_id, [company_id], [vid], { amount: amount})}
29
34
 
30
35
  it 'must find by the deal id' do
31
36
  find_deal = Hubspot::Deal.find(deal.deal_id)
32
37
  find_deal.deal_id.should eql deal.deal_id
33
- find_deal.properties["amount"].should eql "30"
38
+ find_deal.properties["amount"].should eql amount
39
+ end
40
+ end
41
+
42
+ describe '.find_by_company' do
43
+ cassette 'deal_find_by_company'
44
+ let(:company) { Hubspot::Company.create!('Test Company') }
45
+ let(:deal) { Hubspot::Deal.create!(portal_id, [company.vid], [vid], { amount: amount }) }
46
+
47
+ it 'returns company deals' do
48
+ deals = Hubspot::Deal.find_by_company(company)
49
+ deals.first.deal_id.should eql deal.deal_id
50
+ deals.first.properties['amount'].should eql amount
34
51
  end
35
52
  end
36
53
 
@@ -68,7 +85,7 @@ describe Hubspot::Deal do
68
85
  describe '#destroy!' do
69
86
  cassette 'destroy_deal'
70
87
 
71
- let(:deal) {Hubspot::Deal.create!(62515, [8954037], [27136], {amount: 30})}
88
+ let(:deal) {Hubspot::Deal.create!(portal_id, [company_id], [vid], {amount: amount})}
72
89
 
73
90
  it 'should remove from hubspot' do
74
91
  pending
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hubspot-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew DiMichele
8
+ - Chris Bisnett
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2017-10-24 00:00:00.000000000 Z
12
+ date: 2017-12-11 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activesupport
@@ -42,16 +43,16 @@ dependencies:
42
43
  name: rake
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
- - - ">="
46
+ - - "~>"
46
47
  - !ruby/object:Gem::Version
47
- version: '0'
48
+ version: '11.0'
48
49
  type: :development
49
50
  prerelease: false
50
51
  version_requirements: !ruby/object:Gem::Requirement
51
52
  requirements:
52
- - - ">="
53
+ - - "~>"
53
54
  - !ruby/object:Gem::Version
54
- version: '0'
55
+ version: '11.0'
55
56
  - !ruby/object:Gem::Dependency
56
57
  name: rspec
57
58
  requirement: !ruby/object:Gem::Requirement