ruby-pardot 1.3.2 → 1.4.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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +9 -0
  4. data/Gemfile +3 -1
  5. data/Gemfile.lock +5 -5
  6. data/README.rdoc +19 -17
  7. data/Rakefile +2 -3
  8. data/lib/pardot/authentication.rb +23 -12
  9. data/lib/pardot/client.rb +17 -6
  10. data/lib/pardot/error.rb +6 -2
  11. data/lib/pardot/http.rb +47 -44
  12. data/lib/pardot/objects/custom_fields.rb +13 -17
  13. data/lib/pardot/objects/emails.rb +9 -14
  14. data/lib/pardot/objects/list_memberships.rb +8 -12
  15. data/lib/pardot/objects/lists.rb +20 -25
  16. data/lib/pardot/objects/opportunities.rb +21 -26
  17. data/lib/pardot/objects/prospect_accounts.rb +6 -7
  18. data/lib/pardot/objects/prospects.rb +26 -30
  19. data/lib/pardot/objects/users.rb +17 -21
  20. data/lib/pardot/objects/visitor_activities.rb +15 -19
  21. data/lib/pardot/objects/visitors.rb +17 -21
  22. data/lib/pardot/objects/visits.rb +15 -19
  23. data/lib/pardot/version.rb +1 -1
  24. data/ruby-pardot.gemspec +14 -12
  25. data/spec/pardot/authentication_spec.rb +78 -44
  26. data/spec/pardot/client_spec.rb +50 -15
  27. data/spec/pardot/error_spec.rb +6 -4
  28. data/spec/pardot/http_spec.rb +83 -92
  29. data/spec/pardot/objects/custom_fields_spec.rb +48 -53
  30. data/spec/pardot/objects/emails_spec.rb +34 -36
  31. data/spec/pardot/objects/lists_spec.rb +34 -38
  32. data/spec/pardot/objects/opportunities_spec.rb +58 -61
  33. data/spec/pardot/objects/prospect_accounts_spec.rb +72 -75
  34. data/spec/pardot/objects/prospects_spec.rb +56 -56
  35. data/spec/pardot/objects/users_spec.rb +58 -61
  36. data/spec/pardot/objects/visitor_activities_spec.rb +57 -61
  37. data/spec/pardot/objects/visitors_spec.rb +56 -61
  38. data/spec/pardot/objects/visits_spec.rb +56 -61
  39. data/spec/spec_helper.rb +2 -0
  40. data/spec/support/client_support.rb +40 -4
  41. data/spec/support/fakeweb.rb +13 -8
  42. metadata +8 -7
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  describe Pardot::ResponseError do
3
5
  before do
4
6
  @res = {
5
- "code" => "9",
6
- "__content__" => "A prospect with the specified email address already exists"
7
+ 'code' => '9',
8
+ '__content__' => 'A prospect with the specified email address already exists'
7
9
  }
8
10
  end
9
11
 
@@ -21,10 +23,10 @@ describe Pardot::ResponseError do
21
23
  described_class.new(@res)
22
24
  end
23
25
  specify do
24
- expect(subject.to_s).to eq(@res["__content__"])
26
+ expect(subject.to_s).to eq(@res['__content__'])
25
27
  end
26
28
  specify do
27
- expect(subject.message).to eq(@res["__content__"])
29
+ expect(subject.message).to eq(@res['__content__'])
28
30
  end
29
31
  end
30
32
 
@@ -1,133 +1,124 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path("#{File.dirname(__FILE__)}/../spec_helper")
2
4
 
3
5
  describe Pardot::Http do
4
-
5
6
  before do
6
7
  @client = create_client
7
- fake_authenticate @client, "my_api_key"
8
+ fake_authenticate @client, 'my_api_key'
8
9
  end
9
-
10
+
10
11
  def create_client
11
- @client = Pardot::Client.new "user@test.com", "foo", "bar"
12
+ @client = Pardot::Client.new 'user@test.com', 'foo', 'bar'
12
13
  end
13
-
14
- describe "get" do
15
-
16
- def get object = "foo", path = "/bar", params = {}
14
+
15
+ describe 'get' do
16
+ def get(object = 'foo', path = '/bar', params = {})
17
17
  @client.get object, path, params
18
18
  end
19
-
20
- it "should notice errors and raise them as Pardot::ResponseError" do
21
- fake_get "/api/foo/version/3/bar?format=simple",
22
- %(?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Login failed</err>\n</rsp>\n)
23
-
24
19
 
25
- expect(lambda { get }).to raise_error(Pardot::ResponseError)
20
+ it 'should notice errors and raise them as Pardot::ResponseError' do
21
+ fake_get '/api/foo/version/3/bar?format=simple',
22
+ %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Login failed</err>\n</rsp>\n)
23
+
24
+ expect(-> { get }).to raise_error(Pardot::ResponseError)
26
25
  end
27
-
28
- it "should catch and reraise SocketErrors as Pardot::NetError" do
26
+
27
+ it 'should catch and reraise SocketErrors as Pardot::NetError' do
29
28
  expect(Pardot::Client).to receive(:get).and_raise(SocketError)
30
-
31
- expect(lambda { get }).to raise_error(Pardot::NetError)
32
- end
33
-
34
- it "should call handle_expired_api_key when the api key expires" do
35
- fake_get "/api/foo/version/3/bar?format=simple",
36
- %(?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Invalid API key or user key</err>\n</rsp>\n)
37
-
29
+
30
+ expect(-> { get }).to raise_error(Pardot::NetError)
31
+ end
32
+
33
+ it 'should call handle_expired_api_key when the api key expires' do
34
+ fake_get '/api/foo/version/3/bar?format=simple',
35
+ %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Invalid API key or user key</err>\n</rsp>\n)
36
+
38
37
  expect(@client).to receive(:handle_expired_api_key)
39
38
  get
40
39
  end
41
-
42
40
  end
43
-
44
- describe "post" do
45
-
46
- def post object = "foo", path = "/bar", params = {}
41
+
42
+ describe 'post' do
43
+ def post(object = 'foo', path = '/bar', params = {})
47
44
  @client.post object, path, params
48
45
  end
49
-
50
- it "should notice errors and raise them as Pardot::ResponseError" do
51
- fake_post "/api/foo/version/3/bar?format=simple",
52
- %(?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Login failed</err>\n</rsp>\n)
53
-
54
- expect(lambda { post }).to raise_error(Pardot::ResponseError)
46
+
47
+ it 'should notice errors and raise them as Pardot::ResponseError' do
48
+ fake_post '/api/foo/version/3/bar?format=simple',
49
+ %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Login failed</err>\n</rsp>\n)
50
+
51
+ expect(-> { post }).to raise_error(Pardot::ResponseError)
55
52
  end
56
-
57
- it "should catch and reraise SocketErrors as Pardot::NetError" do
53
+
54
+ it 'should catch and reraise SocketErrors as Pardot::NetError' do
58
55
  expect(Pardot::Client).to receive(:post).and_raise(SocketError)
59
-
60
- expect(lambda { post }).to raise_error(Pardot::NetError)
61
- end
62
-
63
- it "should call handle_expired_api_key when the api key expires" do
64
- fake_post "/api/foo/version/3/bar?format=simple",
65
- %(?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Invalid API key or user key</err>\n</rsp>\n)
66
-
56
+
57
+ expect(-> { post }).to raise_error(Pardot::NetError)
58
+ end
59
+
60
+ it 'should call handle_expired_api_key when the api key expires' do
61
+ fake_post '/api/foo/version/3/bar?format=simple',
62
+ %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Invalid API key or user key</err>\n</rsp>\n)
63
+
67
64
  expect(@client).to receive(:handle_expired_api_key)
68
65
  post
69
66
  end
70
-
71
67
  end
72
68
 
73
- describe "getV4" do
74
-
75
- def get object = "foo", path = "/bar", params = {}
76
- @client.version = "4"
69
+ describe 'getV4' do
70
+ def get(object = 'foo', path = '/bar', params = {})
71
+ @client.version = '4'
77
72
  @client.get object, path, params
78
73
  end
79
-
80
- it "should notice errors and raise them as Pardot::ResponseError" do
81
- fake_get "/api/foo/version/4/bar?format=simple",
82
- %(?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Login failed</err>\n</rsp>\n)
83
-
84
- expect(lambda { get }).to raise_error(Pardot::ResponseError)
74
+
75
+ it 'should notice errors and raise them as Pardot::ResponseError' do
76
+ fake_get '/api/foo/version/4/bar?format=simple',
77
+ %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Login failed</err>\n</rsp>\n)
78
+
79
+ expect(-> { get }).to raise_error(Pardot::ResponseError)
85
80
  end
86
-
87
- it "should catch and reraise SocketErrors as Pardot::NetError" do
81
+
82
+ it 'should catch and reraise SocketErrors as Pardot::NetError' do
88
83
  expect(Pardot::Client).to receive(:get).and_raise(SocketError)
89
-
90
- expect(lambda { get }).to raise_error(Pardot::NetError)
91
- end
92
-
93
- it "should call handle_expired_api_key when the api key expires" do
94
- fake_get "/api/foo/version/4/bar?format=simple",
95
- %(?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Invalid API key or user key</err>\n</rsp>\n)
96
-
84
+
85
+ expect(-> { get }).to raise_error(Pardot::NetError)
86
+ end
87
+
88
+ it 'should call handle_expired_api_key when the api key expires' do
89
+ fake_get '/api/foo/version/4/bar?format=simple',
90
+ %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Invalid API key or user key</err>\n</rsp>\n)
91
+
97
92
  expect(@client).to receive(:handle_expired_api_key)
98
93
  get
99
94
  end
100
-
101
95
  end
102
-
103
- describe "postV4" do
104
-
105
- def post object = "foo", path = "/bar", params = {}
106
- @client.version = "4"
96
+
97
+ describe 'postV4' do
98
+ def post(object = 'foo', path = '/bar', params = {})
99
+ @client.version = '4'
107
100
  @client.post object, path, params
108
101
  end
109
-
110
- it "should notice errors and raise them as Pardot::ResponseError" do
111
- fake_post "/api/foo/version/4/bar?format=simple",
112
- %(?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Login failed</err>\n</rsp>\n)
113
-
114
- expect(lambda { post }).to raise_error(Pardot::ResponseError)
102
+
103
+ it 'should notice errors and raise them as Pardot::ResponseError' do
104
+ fake_post '/api/foo/version/4/bar?format=simple',
105
+ %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Login failed</err>\n</rsp>\n)
106
+
107
+ expect(-> { post }).to raise_error(Pardot::ResponseError)
115
108
  end
116
-
117
- it "should catch and reraise SocketErrors as Pardot::NetError" do
109
+
110
+ it 'should catch and reraise SocketErrors as Pardot::NetError' do
118
111
  expect(Pardot::Client).to receive(:post).and_raise(SocketError)
119
-
120
- expect(lambda { post }).to raise_error(Pardot::NetError)
121
- end
122
-
123
- it "should call handle_expired_api_key when the api key expires" do
124
- fake_post "/api/foo/version/4/bar?format=simple",
125
- %(?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Invalid API key or user key</err>\n</rsp>\n)
126
-
112
+
113
+ expect(-> { post }).to raise_error(Pardot::NetError)
114
+ end
115
+
116
+ it 'should call handle_expired_api_key when the api key expires' do
117
+ fake_post '/api/foo/version/4/bar?format=simple',
118
+ %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Invalid API key or user key</err>\n</rsp>\n)
119
+
127
120
  expect(@client).to receive(:handle_expired_api_key)
128
121
  post
129
122
  end
130
-
131
123
  end
132
-
133
- end
124
+ end
@@ -1,58 +1,53 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
2
4
 
3
5
  describe Pardot::Objects::CustomFields do
4
-
5
- before do
6
- @client = create_client
7
- end
8
-
9
- describe "query" do
10
-
11
- def sample_results
12
- %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="ok" version="1.0">
13
- <result>
14
- <total_results>1</total_results>
15
- <customField>
16
- <created_at>2019-11-26 13:40:37</created_at>
17
- <crm_id null="true" />
18
- <field_id>CustomObject1574793618883</field_id>
19
- <id>8932</id>
20
- <is_record_multiple_responses>false</is_record_multiple_responses>
21
- <is_use_values>false</is_use_values>
22
- <name>Ω≈ç√∫˜µ≤≥÷</name>
23
- <type>Text</type>
24
- <type_id>1</type_id>
25
- <updated_at>2019-11-26 13:40:37</updated_at>
26
- </customField>
27
- </result>
28
- </rsp>)
29
- end
30
-
31
- before do
32
- @client = create_client
33
- end
34
-
35
- it "should take in some arguments" do
36
- fake_get "/api/customField/version/3/do/query?id_greater_than=200&format=simple", sample_results
37
-
38
- expect(@client.custom_fields.query(:id_greater_than => 200)).to eq({"total_results" => 1,
39
- "customField"=>
40
- {
41
- "id"=>"8932",
42
- "name"=>"Ω≈ç√∫˜µ≤≥÷",
43
- "field_id"=>"CustomObject1574793618883",
44
- "type"=>"Text",
45
- "type_id"=>"1",
46
- "crm_id"=>{"null"=>"true"},
47
- "is_record_multiple_responses"=>"false",
48
- "is_use_values"=>"false",
49
- "created_at"=>"2019-11-26 13:40:37",
50
- "updated_at"=>"2019-11-26 13:40:37"
51
- }
52
- })
53
- assert_authorization_header
6
+ create_auth_managers.each do |auth_manager|
7
+ context auth_manager.test_name_suffix do
8
+ let(:client) { auth_manager.create_client }
9
+
10
+ describe 'query' do
11
+ def sample_results
12
+ %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="ok" version="1.0">
13
+ <result>
14
+ <total_results>1</total_results>
15
+ <customField>
16
+ <created_at>2019-11-26 13:40:37</created_at>
17
+ <crm_id null="true" />
18
+ <field_id>CustomObject1574793618883</field_id>
19
+ <id>8932</id>
20
+ <is_record_multiple_responses>false</is_record_multiple_responses>
21
+ <is_use_values>false</is_use_values>
22
+ <name>Ω≈ç√∫˜µ≤≥÷</name>
23
+ <type>Text</type>
24
+ <type_id>1</type_id>
25
+ <updated_at>2019-11-26 13:40:37</updated_at>
26
+ </customField>
27
+ </result>
28
+ </rsp>)
29
+ end
30
+
31
+ it 'should take in some arguments' do
32
+ fake_get '/api/customField/version/3/do/query?id_greater_than=200&format=simple', sample_results
33
+
34
+ expect(client.custom_fields.query(id_greater_than: 200)).to eq({ 'total_results' => 1,
35
+ 'customField' =>
36
+ {
37
+ 'id' => '8932',
38
+ 'name' => 'Ω≈ç√∫˜µ≤≥÷',
39
+ 'field_id' => 'CustomObject1574793618883',
40
+ 'type' => 'Text',
41
+ 'type_id' => '1',
42
+ 'crm_id' => { 'null' => 'true' },
43
+ 'is_record_multiple_responses' => 'false',
44
+ 'is_use_values' => 'false',
45
+ 'created_at' => '2019-11-26 13:40:37',
46
+ 'updated_at' => '2019-11-26 13:40:37'
47
+ } })
48
+ assert_authorization_header auth_manager
49
+ end
50
+ end
54
51
  end
55
-
56
52
  end
57
-
58
53
  end
@@ -1,39 +1,37 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
1
+ # frozen_string_literal: true
2
2
 
3
- describe Pardot::Objects::Emails do
4
-
5
- before do
6
- @client = create_client
7
- end
8
-
9
- def sample_response
10
- %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="ok" version="1.0">
11
- <email>
12
- <name>My Email</name>
13
- </email>
14
- </rsp>)
15
- end
16
-
17
- before do
18
- @client = create_client
19
- end
3
+ require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
20
4
 
21
- it "should take in the email ID" do
22
- fake_get "/api/email/version/3/do/read/id/12?format=simple", sample_response
23
- expect(@client.emails.read_by_id(12)).to eq({"name" => "My Email"})
24
- assert_authorization_header
25
- end
26
-
27
- it 'should send to a prospect' do
28
- fake_post '/api/email/version/3/do/send/prospect_id/42?campaign_id=765&email_template_id=86&format=simple', sample_response
29
- expect(@client.emails.send_to_prospect(42, :campaign_id => 765, :email_template_id => 86)).to eq({"name" => "My Email"})
30
- assert_authorization_header
31
- end
32
-
33
- it 'should send to a list' do
34
- fake_post '/api/email/version/3/do/send?email_template_id=200&list_ids[]=235&campaign_id=654&format=simple', sample_response
35
- expect(@client.emails.send_to_list(:email_template_id => 200, 'list_ids[]' => 235, :campaign_id => 654)).to eq({"name" => "My Email"})
36
- assert_authorization_header
5
+ describe Pardot::Objects::Emails do
6
+ create_auth_managers.each do |auth_manager|
7
+ context auth_manager.test_name_suffix do
8
+ let(:client) { auth_manager.create_client }
9
+
10
+ def sample_response
11
+ %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="ok" version="1.0">
12
+ <email>
13
+ <name>My Email</name>
14
+ </email>
15
+ </rsp>)
16
+ end
17
+
18
+ it 'should take in the email ID' do
19
+ fake_get '/api/email/version/3/do/read/id/12?format=simple', sample_response
20
+ expect(client.emails.read_by_id(12)).to eq({ 'name' => 'My Email' })
21
+ assert_authorization_header auth_manager
22
+ end
23
+
24
+ it 'should send to a prospect' do
25
+ fake_post '/api/email/version/3/do/send/prospect_id/42?campaign_id=765&email_template_id=86&format=simple', sample_response
26
+ expect(client.emails.send_to_prospect(42, campaign_id: 765, email_template_id: 86)).to eq({ 'name' => 'My Email' })
27
+ assert_authorization_header auth_manager
28
+ end
29
+
30
+ it 'should send to a list' do
31
+ fake_post '/api/email/version/3/do/send?email_template_id=200&list_ids%5B%5D=235&campaign_id=654&format=simple', sample_response
32
+ expect(client.emails.send_to_list(:email_template_id => 200, 'list_ids[]' => 235, :campaign_id => 654)).to eq({ 'name' => 'My Email' })
33
+ assert_authorization_header auth_manager
34
+ end
35
+ end
37
36
  end
38
-
39
- end
37
+ end
@@ -1,42 +1,38 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
2
4
 
3
5
  describe Pardot::Objects::Lists do
4
-
5
- before do
6
- @client = create_client
7
- end
8
-
9
- describe "query" do
10
-
11
- def sample_results
12
- %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="ok" version="1.0">
13
- <result>
14
- <total_results>2</total_results>
15
- <list>
16
- <name>Asdf List</name>
17
- </list>
18
- <list>
19
- <name>Qwerty List</name>
20
- </list>
21
- </result>
22
- </rsp>)
23
- end
24
-
25
- before do
26
- @client = create_client
27
- end
28
-
29
- it "should take in some arguments" do
30
- fake_get "/api/list/version/3/do/query?id_greater_than=200&format=simple", sample_results
31
-
32
- expect(@client.lists.query(:id_greater_than => 200)).to eq({"total_results" => 2,
33
- "list"=>[
34
- {"name"=>"Asdf List"},
35
- {"name"=>"Qwerty List"}
36
- ]})
37
- assert_authorization_header
6
+ create_auth_managers.each do |auth_manager|
7
+ context auth_manager.test_name_suffix do
8
+ let(:client) { auth_manager.create_client }
9
+
10
+ describe 'query' do
11
+ def sample_results
12
+ %(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="ok" version="1.0">
13
+ <result>
14
+ <total_results>2</total_results>
15
+ <list>
16
+ <name>Asdf List</name>
17
+ </list>
18
+ <list>
19
+ <name>Qwerty List</name>
20
+ </list>
21
+ </result>
22
+ </rsp>)
23
+ end
24
+
25
+ it 'should take in some arguments' do
26
+ fake_get '/api/list/version/3/do/query?id_greater_than=200&format=simple', sample_results
27
+
28
+ expect(client.lists.query(id_greater_than: 200)).to eq({ 'total_results' => 2,
29
+ 'list' => [
30
+ { 'name' => 'Asdf List' },
31
+ { 'name' => 'Qwerty List' }
32
+ ] })
33
+ assert_authorization_header auth_manager
34
+ end
35
+ end
38
36
  end
39
-
40
37
  end
41
-
42
- end
38
+ end