hubspot-api-ruby 0.8.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 +7 -0
 - data/.rspec +3 -0
 - data/Gemfile +3 -0
 - data/Guardfile +9 -0
 - data/LICENSE.txt +18 -0
 - data/README.md +295 -0
 - data/RELEASING.md +6 -0
 - data/Rakefile +32 -0
 - data/hubspot-api-ruby.gemspec +42 -0
 - data/lib/hubspot-api-ruby.rb +39 -0
 - data/lib/hubspot/blog.rb +98 -0
 - data/lib/hubspot/collection.rb +41 -0
 - data/lib/hubspot/company.rb +160 -0
 - data/lib/hubspot/company_properties.rb +59 -0
 - data/lib/hubspot/config.rb +63 -0
 - data/lib/hubspot/connection.rb +152 -0
 - data/lib/hubspot/contact.rb +110 -0
 - data/lib/hubspot/contact_list.rb +129 -0
 - data/lib/hubspot/contact_properties.rb +59 -0
 - data/lib/hubspot/deal.rb +173 -0
 - data/lib/hubspot/deal_pipeline.rb +58 -0
 - data/lib/hubspot/deal_properties.rb +59 -0
 - data/lib/hubspot/deprecator.rb +7 -0
 - data/lib/hubspot/engagement.rb +222 -0
 - data/lib/hubspot/event.rb +21 -0
 - data/lib/hubspot/exceptions.rb +18 -0
 - data/lib/hubspot/file.rb +38 -0
 - data/lib/hubspot/form.rb +95 -0
 - data/lib/hubspot/oauth.rb +50 -0
 - data/lib/hubspot/owner.rb +57 -0
 - data/lib/hubspot/paged_collection.rb +35 -0
 - data/lib/hubspot/properties.rb +123 -0
 - data/lib/hubspot/railtie.rb +10 -0
 - data/lib/hubspot/resource.rb +270 -0
 - data/lib/hubspot/subscription.rb +37 -0
 - data/lib/hubspot/topic.rb +37 -0
 - data/lib/hubspot/utils.rb +127 -0
 - data/lib/tasks/hubspot.rake +53 -0
 - data/spec/factories/companies.rb +9 -0
 - data/spec/factories/contacts.rb +10 -0
 - data/spec/lib/hubspot-ruby_spec.rb +12 -0
 - data/spec/lib/hubspot/blog_spec.rb +150 -0
 - data/spec/lib/hubspot/company_properties_spec.rb +410 -0
 - data/spec/lib/hubspot/company_spec.rb +340 -0
 - data/spec/lib/hubspot/config_spec.rb +87 -0
 - data/spec/lib/hubspot/connection_spec.rb +214 -0
 - data/spec/lib/hubspot/contact_list_spec.rb +301 -0
 - data/spec/lib/hubspot/contact_properties_spec.rb +245 -0
 - data/spec/lib/hubspot/contact_spec.rb +223 -0
 - data/spec/lib/hubspot/deal_pipeline_spec.rb +85 -0
 - data/spec/lib/hubspot/deal_properties_spec.rb +262 -0
 - data/spec/lib/hubspot/deal_spec.rb +185 -0
 - data/spec/lib/hubspot/deprecator_spec.rb +15 -0
 - data/spec/lib/hubspot/engagement_spec.rb +177 -0
 - data/spec/lib/hubspot/event_spec.rb +33 -0
 - data/spec/lib/hubspot/file_spec.rb +38 -0
 - data/spec/lib/hubspot/form_spec.rb +189 -0
 - data/spec/lib/hubspot/owner_spec.rb +56 -0
 - data/spec/lib/hubspot/properties_spec.rb +45 -0
 - data/spec/lib/hubspot/resource_spec.rb +54 -0
 - data/spec/lib/hubspot/topic_spec.rb +23 -0
 - data/spec/lib/hubspot/utils_spec.rb +164 -0
 - data/spec/lib/tasks/hubspot_spec.rb +119 -0
 - data/spec/shared_examples/saveable_resource.rb +45 -0
 - data/spec/shared_examples/updateable_resource.rb +87 -0
 - data/spec/spec_helper.rb +44 -0
 - data/spec/support/capture_output.rb +21 -0
 - data/spec/support/cassette_helper.rb +19 -0
 - data/spec/support/hubspot_api_helpers.rb +13 -0
 - data/spec/support/rake.rb +46 -0
 - data/spec/support/tests_helper.rb +17 -0
 - data/spec/support/vcr.rb +16 -0
 - metadata +369 -0
 
| 
         @@ -0,0 +1,185 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            describe Hubspot::Deal do
         
     | 
| 
      
 2 
     | 
    
         
            +
              let(:portal_id) { 62515 }
         
     | 
| 
      
 3 
     | 
    
         
            +
              let(:company_id) { 8954037 }
         
     | 
| 
      
 4 
     | 
    
         
            +
              let(:vid) { 27136 }
         
     | 
| 
      
 5 
     | 
    
         
            +
              let(:amount) { '30' }
         
     | 
| 
      
 6 
     | 
    
         
            +
              let(:deal) { Hubspot::Deal.create!(portal_id, [company_id], [vid], { amount: amount}) }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              let(:example_deal_hash) do
         
     | 
| 
      
 9 
     | 
    
         
            +
                VCR.use_cassette("deal_example") do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  HTTParty.get("https://api.hubapi.com/deals/v1/deal/3?hapikey=demo&portalId=#{portal_id}").parsed_response
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              before{ Hubspot.configure(hapikey: "demo") }
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              describe "#initialize" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                subject{ Hubspot::Deal.new(example_deal_hash) }
         
     | 
| 
      
 18 
     | 
    
         
            +
                it  { should be_an_instance_of Hubspot::Deal }
         
     | 
| 
      
 19 
     | 
    
         
            +
                its (:portal_id) { should == portal_id }
         
     | 
| 
      
 20 
     | 
    
         
            +
                its (:deal_id) { should == 3 }
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              describe ".create!" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                cassette "deal_create"
         
     | 
| 
      
 25 
     | 
    
         
            +
                subject { Hubspot::Deal.create!(portal_id, [company_id], [vid], {}) }
         
     | 
| 
      
 26 
     | 
    
         
            +
                its(:deal_id)     { should_not be_nil }
         
     | 
| 
      
 27 
     | 
    
         
            +
                its(:portal_id)   { should eql portal_id }
         
     | 
| 
      
 28 
     | 
    
         
            +
                its(:company_ids) { should eql [company_id]}
         
     | 
| 
      
 29 
     | 
    
         
            +
                its(:vids)        { should eql [vid]}
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              describe '.update' do
         
     | 
| 
      
 33 
     | 
    
         
            +
                let(:changed_properties) { { dealname: 'super deal' } }
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                context 'with an existing resource' do
         
     | 
| 
      
 36 
     | 
    
         
            +
                  cassette
         
     | 
| 
      
 37 
     | 
    
         
            +
                  subject { described_class.update(deal.deal_id, changed_properties) }
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  it 'updates' do
         
     | 
| 
      
 40 
     | 
    
         
            +
                    expect(subject).to be_truthy
         
     | 
| 
      
 41 
     | 
    
         
            +
                    find_deal = Hubspot::Deal.find(deal.deal_id)
         
     | 
| 
      
 42 
     | 
    
         
            +
                    expect(find_deal['dealname']).to eq 'super deal'
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                context 'with an invalid resource' do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  cassette
         
     | 
| 
      
 48 
     | 
    
         
            +
                  subject { described_class.update(0, changed_properties) }
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  it { is_expected.to be false }
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
              describe '.update!' do
         
     | 
| 
      
 55 
     | 
    
         
            +
                let(:changed_properties) { { dealname: 'super deal' } }
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                context 'with an existing resource' do
         
     | 
| 
      
 58 
     | 
    
         
            +
                  cassette
         
     | 
| 
      
 59 
     | 
    
         
            +
                  subject { described_class.update!(deal.deal_id, changed_properties) }
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                  it 'updates' do
         
     | 
| 
      
 62 
     | 
    
         
            +
                    expect(subject).to be_truthy
         
     | 
| 
      
 63 
     | 
    
         
            +
                    find_deal = Hubspot::Deal.find(deal.deal_id)
         
     | 
| 
      
 64 
     | 
    
         
            +
                    expect(find_deal['dealname']).to eq 'super deal'
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                context 'with an invalid resource' do
         
     | 
| 
      
 69 
     | 
    
         
            +
                  cassette
         
     | 
| 
      
 70 
     | 
    
         
            +
                  subject { described_class.update!(0, changed_properties) }
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                  it 'fails with an error' do
         
     | 
| 
      
 73 
     | 
    
         
            +
                    expect { subject }.to raise_error Hubspot::RequestError
         
     | 
| 
      
 74 
     | 
    
         
            +
                  end
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
              describe '#update' do
         
     | 
| 
      
 79 
     | 
    
         
            +
                let(:changed_properties) { { dealname: 'super deal' }.stringify_keys }
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                context 'without overlapping changes' do
         
     | 
| 
      
 82 
     | 
    
         
            +
                  cassette
         
     | 
| 
      
 83 
     | 
    
         
            +
                  subject { deal.update(changed_properties) }
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                  it 'updates the properties' do
         
     | 
| 
      
 86 
     | 
    
         
            +
                    expect(subject).to be_truthy
         
     | 
| 
      
 87 
     | 
    
         
            +
                    changed_properties.each do |property, value|
         
     | 
| 
      
 88 
     | 
    
         
            +
                      expect(deal[property]).to eq value
         
     | 
| 
      
 89 
     | 
    
         
            +
                    end
         
     | 
| 
      
 90 
     | 
    
         
            +
                  end
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                context 'with overlapping changes' do
         
     | 
| 
      
 94 
     | 
    
         
            +
                  cassette
         
     | 
| 
      
 95 
     | 
    
         
            +
                  subject { deal.update(changed_properties) }
         
     | 
| 
      
 96 
     | 
    
         
            +
                  let(:overlapping_properties) { { dealname: 'old deal', amount: 6 }.stringify_keys }
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 99 
     | 
    
         
            +
                    overlapping_properties.each { |property, value| deal.properties[property] = value }
         
     | 
| 
      
 100 
     | 
    
         
            +
                  end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                  it 'merges and updates the properties' do
         
     | 
| 
      
 103 
     | 
    
         
            +
                    expect(subject).to be_truthy
         
     | 
| 
      
 104 
     | 
    
         
            +
                    overlapping_properties.merge(changed_properties).each do |property, value|
         
     | 
| 
      
 105 
     | 
    
         
            +
                      expect(deal[property]).to eq value
         
     | 
| 
      
 106 
     | 
    
         
            +
                    end
         
     | 
| 
      
 107 
     | 
    
         
            +
                  end
         
     | 
| 
      
 108 
     | 
    
         
            +
                end
         
     | 
| 
      
 109 
     | 
    
         
            +
              end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
              describe ".find" do
         
     | 
| 
      
 112 
     | 
    
         
            +
                cassette "deal_find"
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                it 'must find by the deal id' do
         
     | 
| 
      
 115 
     | 
    
         
            +
                  find_deal = Hubspot::Deal.find(deal.deal_id)
         
     | 
| 
      
 116 
     | 
    
         
            +
                  find_deal.deal_id.should eql deal.deal_id
         
     | 
| 
      
 117 
     | 
    
         
            +
                  find_deal.properties["amount"].should eql amount
         
     | 
| 
      
 118 
     | 
    
         
            +
                end
         
     | 
| 
      
 119 
     | 
    
         
            +
              end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
              describe '.find_by_company' do
         
     | 
| 
      
 122 
     | 
    
         
            +
                cassette 'deal_find_by_company'
         
     | 
| 
      
 123 
     | 
    
         
            +
                let(:company) { Hubspot::Company.create(name: 'Test Company') }
         
     | 
| 
      
 124 
     | 
    
         
            +
                let(:company_id) { company.id }
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
                it 'returns company deals' do
         
     | 
| 
      
 127 
     | 
    
         
            +
                  deals = Hubspot::Deal.find_by_company(company)
         
     | 
| 
      
 128 
     | 
    
         
            +
                  deals.first.deal_id.should eql deal.deal_id
         
     | 
| 
      
 129 
     | 
    
         
            +
                  deals.first.properties['amount'].should eql amount
         
     | 
| 
      
 130 
     | 
    
         
            +
                end
         
     | 
| 
      
 131 
     | 
    
         
            +
              end
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
              describe '.recent' do
         
     | 
| 
      
 134 
     | 
    
         
            +
                cassette 'find_all_recent_updated_deals'
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                it 'must get the recents updated deals' do
         
     | 
| 
      
 137 
     | 
    
         
            +
                  deals = Hubspot::Deal.recent
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                  first = deals.first
         
     | 
| 
      
 140 
     | 
    
         
            +
                  last = deals.last
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
                  expect(first).to be_a Hubspot::Deal
         
     | 
| 
      
 143 
     | 
    
         
            +
                  expect(first.properties['amount']).to eql '0'
         
     | 
| 
      
 144 
     | 
    
         
            +
                  expect(first.properties['dealname']).to eql '1420787916-gou2rzdgjzx2@u2rzdgjzx2.com'
         
     | 
| 
      
 145 
     | 
    
         
            +
                  expect(first.properties['dealstage']).to eql 'closedwon'
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                  expect(last).to be_a Hubspot::Deal
         
     | 
| 
      
 148 
     | 
    
         
            +
                  expect(last.properties['amount']).to eql '250'
         
     | 
| 
      
 149 
     | 
    
         
            +
                  expect(last.properties['dealname']).to eql '1420511993-U9862RD9XR@U9862RD9XR.com'
         
     | 
| 
      
 150 
     | 
    
         
            +
                  expect(last.properties['dealstage']).to eql 'closedwon'
         
     | 
| 
      
 151 
     | 
    
         
            +
                end
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                it 'must filter only 2 deals' do
         
     | 
| 
      
 154 
     | 
    
         
            +
                  deals = Hubspot::Deal.recent(count: 2)
         
     | 
| 
      
 155 
     | 
    
         
            +
                  expect(deals.size).to eql 2
         
     | 
| 
      
 156 
     | 
    
         
            +
                end
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
                it 'it must offset the deals' do
         
     | 
| 
      
 159 
     | 
    
         
            +
                  deal = Hubspot::Deal.recent(count: 1, offset: 1).first
         
     | 
| 
      
 160 
     | 
    
         
            +
                  expect(deal.properties['dealname']).to eql '1420704406-goy6v83a97nr@y6v83a97nr.com'  # the third deal
         
     | 
| 
      
 161 
     | 
    
         
            +
                end
         
     | 
| 
      
 162 
     | 
    
         
            +
              end
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
              describe "#destroy!" do
         
     | 
| 
      
 165 
     | 
    
         
            +
                it "should remove from hubspot" do
         
     | 
| 
      
 166 
     | 
    
         
            +
                  VCR.use_cassette("destroy_deal") do
         
     | 
| 
      
 167 
     | 
    
         
            +
                    result = deal.destroy!
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
                    assert_requested :delete, hubspot_api_url("/deals/v1/deal/#{deal.deal_id}?hapikey=demo")
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
                    expect(result).to be true
         
     | 
| 
      
 172 
     | 
    
         
            +
                  end
         
     | 
| 
      
 173 
     | 
    
         
            +
                end
         
     | 
| 
      
 174 
     | 
    
         
            +
              end
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
              describe '#[]' do
         
     | 
| 
      
 177 
     | 
    
         
            +
                subject{ Hubspot::Deal.new(example_deal_hash) }
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
                it 'should get a property' do
         
     | 
| 
      
 180 
     | 
    
         
            +
                  subject.properties.each do |property, value|
         
     | 
| 
      
 181 
     | 
    
         
            +
                    expect(subject[property]).to eql value
         
     | 
| 
      
 182 
     | 
    
         
            +
                  end
         
     | 
| 
      
 183 
     | 
    
         
            +
                end
         
     | 
| 
      
 184 
     | 
    
         
            +
              end
         
     | 
| 
      
 185 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            RSpec.describe Hubspot::Deprecator do
         
     | 
| 
      
 2 
     | 
    
         
            +
              describe ".build" do
         
     | 
| 
      
 3 
     | 
    
         
            +
                it "returns an instance of ActiveSupport::Deprecation" do
         
     | 
| 
      
 4 
     | 
    
         
            +
                  deprecator = Hubspot::Deprecator.build
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                  expect(deprecator).to be_an_instance_of(ActiveSupport::Deprecation)
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                it "uses the correct gem name" do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  deprecator = Hubspot::Deprecator.build
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  expect(deprecator.gem_name).to eq("hubspot-api-ruby")
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,177 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            describe Hubspot::Engagement do
         
     | 
| 
      
 2 
     | 
    
         
            +
              let(:example_engagement_hash) do
         
     | 
| 
      
 3 
     | 
    
         
            +
                VCR.use_cassette("engagement_example") do
         
     | 
| 
      
 4 
     | 
    
         
            +
                  HTTParty.get("https://api.hubapi.com/engagements/v1/engagements/51484873?hapikey=demo").parsed_response
         
     | 
| 
      
 5 
     | 
    
         
            +
                end
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
              let(:example_associated_engagement_hash) do
         
     | 
| 
      
 8 
     | 
    
         
            +
                VCR.use_cassette("engagement_associated_example") do
         
     | 
| 
      
 9 
     | 
    
         
            +
                  HTTParty.get("https://api.hubapi.com/engagements/v1/engagements/58699206?hapikey=demo").parsed_response
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              # http://developers.hubspot.com/docs/methods/contacts/get_contact
         
     | 
| 
      
 14 
     | 
    
         
            +
              before{ Hubspot.configure(hapikey: "demo") }
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              describe "#initialize" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                subject{ Hubspot::Engagement.new(example_engagement_hash) }
         
     | 
| 
      
 18 
     | 
    
         
            +
                it  { should be_an_instance_of Hubspot::Engagement }
         
     | 
| 
      
 19 
     | 
    
         
            +
                its (:id) { should == 51484873 }
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              describe 'EngagementNote' do
         
     | 
| 
      
 23 
     | 
    
         
            +
                describe ".create!" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                  cassette "engagement_create"
         
     | 
| 
      
 25 
     | 
    
         
            +
                  body = "Test note"
         
     | 
| 
      
 26 
     | 
    
         
            +
                  subject { Hubspot::EngagementNote.create!(nil, body) }
         
     | 
| 
      
 27 
     | 
    
         
            +
                  its(:id) { should_not be_nil }
         
     | 
| 
      
 28 
     | 
    
         
            +
                  its(:body) { should eql body }
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                describe ".find" do
         
     | 
| 
      
 32 
     | 
    
         
            +
                  cassette "engagement_find"
         
     | 
| 
      
 33 
     | 
    
         
            +
                  let(:engagement) {Hubspot::EngagementNote.new(example_engagement_hash)}
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  it 'must find by the engagement id' do
         
     | 
| 
      
 36 
     | 
    
         
            +
                    find_engagement = Hubspot::EngagementNote.find(engagement.id)
         
     | 
| 
      
 37 
     | 
    
         
            +
                    find_engagement.id.should eql engagement.id
         
     | 
| 
      
 38 
     | 
    
         
            +
                    find_engagement.body.should eql engagement.body
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                describe ".find_by_company" do
         
     | 
| 
      
 43 
     | 
    
         
            +
                  cassette "engagement_find_by_country"
         
     | 
| 
      
 44 
     | 
    
         
            +
                  let(:engagement) {Hubspot::EngagementNote.new(example_associated_engagement_hash)}
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                  it 'must find by company id' do
         
     | 
| 
      
 47 
     | 
    
         
            +
                    find_engagements = Hubspot::EngagementNote.find_by_company(engagement.associations["companyIds"].first)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    find_engagements.should_not be_nil
         
     | 
| 
      
 49 
     | 
    
         
            +
                    find_engagements.any?{|engagement| engagement.id == engagement.id and engagement.body == engagement.body}.should be true
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                describe ".find_by_contact" do
         
     | 
| 
      
 54 
     | 
    
         
            +
                  cassette "engagement_find_by_contact"
         
     | 
| 
      
 55 
     | 
    
         
            +
                  let(:engagement) {Hubspot::EngagementNote.new(example_associated_engagement_hash)}
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  it 'must find by contact id' do
         
     | 
| 
      
 58 
     | 
    
         
            +
                    find_engagements = Hubspot::EngagementNote.find_by_contact(engagement.associations["contactIds"].first)
         
     | 
| 
      
 59 
     | 
    
         
            +
                    find_engagements.should_not be_nil
         
     | 
| 
      
 60 
     | 
    
         
            +
                    find_engagements.any?{|engagement| engagement.id == engagement.id and engagement.body == engagement.body}.should be true
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
      
 62 
     | 
    
         
            +
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                describe ".find_by_association" do
         
     | 
| 
      
 65 
     | 
    
         
            +
                  cassette "engagement_find_by_association"
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                  it 'must raise for fake association type' do
         
     | 
| 
      
 68 
     | 
    
         
            +
                    expect {
         
     | 
| 
      
 69 
     | 
    
         
            +
                      Hubspot::EngagementNote.find_by_association(1, 'FAKE_TYPE')
         
     | 
| 
      
 70 
     | 
    
         
            +
                    }.to raise_error
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                describe ".all" do
         
     | 
| 
      
 75 
     | 
    
         
            +
                  cassette "find_all_engagements"
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  it 'must get the engagements list' do
         
     | 
| 
      
 78 
     | 
    
         
            +
                    engagements = Hubspot::Engagement.all
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                    expect(engagements['engagements'].size).to eql 100 # default page size
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                    first = engagements['engagements'].first
         
     | 
| 
      
 83 
     | 
    
         
            +
                    last = engagements['engagements'].last
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                    expect(first).to be_a Hubspot::Engagement
         
     | 
| 
      
 86 
     | 
    
         
            +
                    expect(first.engagement['id']).to eql 3981023
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                    expect(last).to be_a Hubspot::Engagement
         
     | 
| 
      
 89 
     | 
    
         
            +
                    expect(last.engagement['id']).to eql 36579065
         
     | 
| 
      
 90 
     | 
    
         
            +
                  end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                  it 'must filter only 2 engagements' do
         
     | 
| 
      
 93 
     | 
    
         
            +
                    engagements = Hubspot::Engagement.all(limit: 2)
         
     | 
| 
      
 94 
     | 
    
         
            +
                    expect(engagements['engagements'].size).to eql 2
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                  it 'it must offset the engagements' do
         
     | 
| 
      
 98 
     | 
    
         
            +
                    single_list = Hubspot::Engagement.all(limit: 5)
         
     | 
| 
      
 99 
     | 
    
         
            +
                    expect(single_list['engagements'].size).to eql 5
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                    second = Hubspot::Engagement.all(count: 1, offset: single_list['offset'])['engagements'].first
         
     | 
| 
      
 102 
     | 
    
         
            +
                    expect(second.engagement['id']).to eql 4815722
         
     | 
| 
      
 103 
     | 
    
         
            +
                  end
         
     | 
| 
      
 104 
     | 
    
         
            +
                end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                describe ".associate!" do
         
     | 
| 
      
 107 
     | 
    
         
            +
                  cassette "engagement_associate"
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                  let(:engagement) { Hubspot::EngagementNote.create!(nil, 'note') }
         
     | 
| 
      
 110 
     | 
    
         
            +
                  let(:contact) { Hubspot::Contact.create(email: "newcontact#{Time.now.to_i}@hsgem.com") }
         
     | 
| 
      
 111 
     | 
    
         
            +
                  subject { Hubspot::Engagement.associate!(engagement.id, 'contact', contact.id) }
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                  it 'associate an engagement to a resource' do
         
     | 
| 
      
 114 
     | 
    
         
            +
                    subject
         
     | 
| 
      
 115 
     | 
    
         
            +
                    found_by_contact = Hubspot::Engagement.find_by_contact(contact.id)
         
     | 
| 
      
 116 
     | 
    
         
            +
                    expect(found_by_contact.first.id).to eql engagement.id
         
     | 
| 
      
 117 
     | 
    
         
            +
                  end
         
     | 
| 
      
 118 
     | 
    
         
            +
                end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                describe '#destroy!' do
         
     | 
| 
      
 121 
     | 
    
         
            +
                  cassette 'engagement_destroy'
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                  let(:engagement) {Hubspot::EngagementNote.create!(nil, 'test note') }
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                  it 'should remove from hubspot' do
         
     | 
| 
      
 126 
     | 
    
         
            +
                    expect(Hubspot::Engagement.find(engagement.id)).to_not be_nil
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
                    expect(engagement.destroy!).to be true
         
     | 
| 
      
 129 
     | 
    
         
            +
                    expect(engagement.destroyed?).to be true
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                    expect(Hubspot::Engagement.find(engagement.id)).to be_nil
         
     | 
| 
      
 132 
     | 
    
         
            +
                  end
         
     | 
| 
      
 133 
     | 
    
         
            +
                end
         
     | 
| 
      
 134 
     | 
    
         
            +
              end
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
              describe 'EngagementCall' do
         
     | 
| 
      
 137 
     | 
    
         
            +
                let(:example_engagement_hash) do
         
     | 
| 
      
 138 
     | 
    
         
            +
                  VCR.use_cassette("engagement_call_example") do
         
     | 
| 
      
 139 
     | 
    
         
            +
                    HTTParty.get("https://api.hubapi.com/engagements/v1/engagements/4709059?hapikey=demo").parsed_response
         
     | 
| 
      
 140 
     | 
    
         
            +
                  end
         
     | 
| 
      
 141 
     | 
    
         
            +
                end
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
                describe ".create!" do
         
     | 
| 
      
 144 
     | 
    
         
            +
                  cassette "engagement_call_create"
         
     | 
| 
      
 145 
     | 
    
         
            +
                  body = "Test call"
         
     | 
| 
      
 146 
     | 
    
         
            +
                  subject { Hubspot::EngagementCall.create!(nil, body, 0) }
         
     | 
| 
      
 147 
     | 
    
         
            +
                  its(:id) { should_not be_nil }
         
     | 
| 
      
 148 
     | 
    
         
            +
                  its(:body) { should eql body }
         
     | 
| 
      
 149 
     | 
    
         
            +
                end
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
                describe ".find" do
         
     | 
| 
      
 152 
     | 
    
         
            +
                  cassette "engagement_call_find"
         
     | 
| 
      
 153 
     | 
    
         
            +
                  let(:engagement) { Hubspot::EngagementNote.new(example_engagement_hash) }
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
                  it 'must find by the engagement id' do
         
     | 
| 
      
 156 
     | 
    
         
            +
                    find_engagement = Hubspot::EngagementNote.find(engagement.id)
         
     | 
| 
      
 157 
     | 
    
         
            +
                    find_engagement.id.should eql engagement.id
         
     | 
| 
      
 158 
     | 
    
         
            +
                    find_engagement.body.should eql engagement.body
         
     | 
| 
      
 159 
     | 
    
         
            +
                  end
         
     | 
| 
      
 160 
     | 
    
         
            +
                end
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
                describe '#destroy!' do
         
     | 
| 
      
 163 
     | 
    
         
            +
                  cassette 'engagement_call_destroy'
         
     | 
| 
      
 164 
     | 
    
         
            +
             
     | 
| 
      
 165 
     | 
    
         
            +
                  let(:engagement) { Hubspot::EngagementCall.create!(nil, 'test call', 0) }
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
                  it 'should remove from hubspot' do
         
     | 
| 
      
 168 
     | 
    
         
            +
                    expect(Hubspot::Engagement.find(engagement.id)).to_not be_nil
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
                    expect(engagement.destroy!).to be true
         
     | 
| 
      
 171 
     | 
    
         
            +
                    expect(engagement.destroyed?).to be true
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
                    expect(Hubspot::Engagement.find(engagement.id)).to be_nil
         
     | 
| 
      
 174 
     | 
    
         
            +
                  end
         
     | 
| 
      
 175 
     | 
    
         
            +
                end
         
     | 
| 
      
 176 
     | 
    
         
            +
              end
         
     | 
| 
      
 177 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            describe Hubspot::Event do
         
     | 
| 
      
 2 
     | 
    
         
            +
              let(:portal_id) { '62515' }
         
     | 
| 
      
 3 
     | 
    
         
            +
              let(:sent_portal_id) { portal_id }
         
     | 
| 
      
 4 
     | 
    
         
            +
              before { Hubspot.configure(hapikey: 'demo', portal_id: portal_id) }
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              describe '.trigger' do
         
     | 
| 
      
 7 
     | 
    
         
            +
                let(:event_id) { '000000001625' }
         
     | 
| 
      
 8 
     | 
    
         
            +
                let(:email) { 'testingapis@hubspot.com' }
         
     | 
| 
      
 9 
     | 
    
         
            +
                let(:options) { {} }
         
     | 
| 
      
 10 
     | 
    
         
            +
                let(:base_url) { 'https://track.hubspot.com' }
         
     | 
| 
      
 11 
     | 
    
         
            +
                let(:url) { "#{base_url}/v1/event?_n=#{event_id}&_a=#{sent_portal_id}&email=#{CGI.escape email}" }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                subject { described_class.trigger(event_id, email, options) }
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                before { stub_request(:get, url).to_return(status: 200, body: JSON.generate({})) }
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                it('sends a request to trigger the event') { is_expected.to be true }
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                context 'with headers' do
         
     | 
| 
      
 20 
     | 
    
         
            +
                  let(:headers) { { 'User-Agent' => 'something' } }
         
     | 
| 
      
 21 
     | 
    
         
            +
                  let(:options) { { headers: headers } }
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  it('sends headers') { is_expected.to be true }
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                context 'when overriding portal_id' do
         
     | 
| 
      
 27 
     | 
    
         
            +
                  let(:sent_portal_id) { '123' }
         
     | 
| 
      
 28 
     | 
    
         
            +
                  let(:options) { { params: { _a: sent_portal_id } } }
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  it('sends a request to the portal_id in the options') { is_expected.to be true }
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            describe Hubspot do
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              let(:example_file_hash) do
         
     | 
| 
      
 4 
     | 
    
         
            +
                VCR.use_cassette("file_list", record: :none) do
         
     | 
| 
      
 5 
     | 
    
         
            +
                  url = Hubspot::Connection.send(:generate_url, Hubspot::File::LIST_FILE_PATH)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  resp = HTTParty.get(url, format: :json)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  resp.parsed_response["objects"].first
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              before do
         
     | 
| 
      
 12 
     | 
    
         
            +
                Hubspot.configure(hapikey: "demo")
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              describe Hubspot::File do
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                describe ".find_by_id" do
         
     | 
| 
      
 18 
     | 
    
         
            +
                  it "should fetch specific file" do
         
     | 
| 
      
 19 
     | 
    
         
            +
            	VCR.use_cassette("file_find", record: :none) do
         
     | 
| 
      
 20 
     | 
    
         
            +
            	  file = Hubspot::File.find_by_id(example_file_hash["id"])
         
     | 
| 
      
 21 
     | 
    
         
            +
            	  file.id.should eq(example_file_hash["id"])
         
     | 
| 
      
 22 
     | 
    
         
            +
            	end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                describe '#destroy!' do
         
     | 
| 
      
 27 
     | 
    
         
            +
                  it 'should remove from hubspot' do
         
     | 
| 
      
 28 
     | 
    
         
            +
            	VCR.use_cassette("file_delete", record: :none) do
         
     | 
| 
      
 29 
     | 
    
         
            +
                      file = Hubspot::File.find_by_id(example_file_hash["id"])
         
     | 
| 
      
 30 
     | 
    
         
            +
            	  res = file.destroy!
         
     | 
| 
      
 31 
     | 
    
         
            +
            	  expect(res["succeeded"]).to be true
         
     | 
| 
      
 32 
     | 
    
         
            +
            	end
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     |