ruby-pardot 1.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.
- data/.gitignore +3 -0
- data/.rspec +0 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +32 -0
- data/README.rdoc +82 -0
- data/Rakefile +11 -0
- data/lib/pardot/authentication.rb +19 -0
- data/lib/pardot/client.rb +32 -0
- data/lib/pardot/error.rb +8 -0
- data/lib/pardot/http.rb +69 -0
- data/lib/pardot/objects/lists.rb +50 -0
- data/lib/pardot/objects/opportunities.rb +54 -0
- data/lib/pardot/objects/prospects.rb +73 -0
- data/lib/pardot/objects/users.rb +45 -0
- data/lib/pardot/objects/visitor_activities.rb +41 -0
- data/lib/pardot/objects/visitors.rb +45 -0
- data/lib/pardot/objects/visits.rb +41 -0
- data/lib/pardot/version.rb +3 -0
- data/lib/ruby-pardot.rb +17 -0
- data/ruby-pardot.gemspec +27 -0
- data/spec/pardot/authentication_spec.rb +38 -0
- data/spec/pardot/http_spec.rb +72 -0
- data/spec/pardot/objects/lists_spec.rb +41 -0
- data/spec/pardot/objects/opportunities_spec.rb +64 -0
- data/spec/pardot/objects/prospects_spec.rb +61 -0
- data/spec/pardot/objects/users_spec.rb +64 -0
- data/spec/pardot/objects/visitor_activities_spec.rb +64 -0
- data/spec/pardot/objects/visitors_spec.rb +64 -0
- data/spec/pardot/objects/visits_spec.rb +64 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/support/client_support.rb +6 -0
- data/spec/support/fakeweb.rb +14 -0
- metadata +132 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
module Pardot
|
2
|
+
module Objects
|
3
|
+
module Users
|
4
|
+
|
5
|
+
def users
|
6
|
+
@users ||= Users.new self
|
7
|
+
end
|
8
|
+
|
9
|
+
class Users
|
10
|
+
|
11
|
+
def initialize client
|
12
|
+
@client = client
|
13
|
+
end
|
14
|
+
|
15
|
+
def query params
|
16
|
+
result = get "/do/query", params, "result"
|
17
|
+
result["total_results"] = result["total_results"].to_i if result["total_results"]
|
18
|
+
result
|
19
|
+
end
|
20
|
+
|
21
|
+
def read_by_email email, params = {}
|
22
|
+
post "/do/read/email/#{email}", params
|
23
|
+
end
|
24
|
+
|
25
|
+
def read_by_id id, params = {}
|
26
|
+
post "/do/read/id/#{id}", params
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
def get path, params = {}, result = "user"
|
32
|
+
response = @client.get "user", path, params
|
33
|
+
result ? response[result] : response
|
34
|
+
end
|
35
|
+
|
36
|
+
def post path, params = {}, result = "user"
|
37
|
+
response = @client.post "user", path, params
|
38
|
+
result ? response[result] : response
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Pardot
|
2
|
+
module Objects
|
3
|
+
module VisitorActivities
|
4
|
+
|
5
|
+
def visitor_activities
|
6
|
+
@visitor_activities ||= VisitorActivities.new self
|
7
|
+
end
|
8
|
+
|
9
|
+
class VisitorActivities
|
10
|
+
|
11
|
+
def initialize client
|
12
|
+
@client = client
|
13
|
+
end
|
14
|
+
|
15
|
+
def query params
|
16
|
+
result = get "/do/query", params, "result"
|
17
|
+
result["total_results"] = result["total_results"].to_i if result["total_results"]
|
18
|
+
result
|
19
|
+
end
|
20
|
+
|
21
|
+
def read id, params = {}
|
22
|
+
post "/do/read/id/#{id}", params
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def get path, params = {}, result = "visitorActivity"
|
28
|
+
response = @client.get "visitorActivity", path, params
|
29
|
+
result ? response[result] : response
|
30
|
+
end
|
31
|
+
|
32
|
+
def post path, params = {}, result = "visitorActivity"
|
33
|
+
response = @client.post "visitorActivity", path, params
|
34
|
+
result ? response[result] : response
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Pardot
|
2
|
+
module Objects
|
3
|
+
module Visitors
|
4
|
+
|
5
|
+
def visitors
|
6
|
+
@visitors ||= Visitors.new self
|
7
|
+
end
|
8
|
+
|
9
|
+
class Visitors
|
10
|
+
|
11
|
+
def initialize client
|
12
|
+
@client = client
|
13
|
+
end
|
14
|
+
|
15
|
+
def query params
|
16
|
+
result = get "/do/query", params, "result"
|
17
|
+
result["total_results"] = result["total_results"].to_i if result["total_results"]
|
18
|
+
result
|
19
|
+
end
|
20
|
+
|
21
|
+
def assign id, params = {}
|
22
|
+
post "/do/assign/id/#{id}", params
|
23
|
+
end
|
24
|
+
|
25
|
+
def read id, params = {}
|
26
|
+
post "/do/read/id/#{id}", params
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
def get path, params = {}, result = "visitor"
|
32
|
+
response = @client.get "visitor", path, params
|
33
|
+
result ? response[result] : response
|
34
|
+
end
|
35
|
+
|
36
|
+
def post path, params = {}, result = "visitor"
|
37
|
+
response = @client.post "visitor", path, params
|
38
|
+
result ? response[result] : response
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Pardot
|
2
|
+
module Objects
|
3
|
+
module Visits
|
4
|
+
|
5
|
+
def visits
|
6
|
+
@visits ||= Visits.new self
|
7
|
+
end
|
8
|
+
|
9
|
+
class Visits
|
10
|
+
|
11
|
+
def initialize client
|
12
|
+
@client = client
|
13
|
+
end
|
14
|
+
|
15
|
+
def query params
|
16
|
+
result = get "/do/query", params, "result"
|
17
|
+
result["total_results"] = result["total_results"].to_i if result["total_results"]
|
18
|
+
result
|
19
|
+
end
|
20
|
+
|
21
|
+
def read id, params = {}
|
22
|
+
post "/do/read/id/#{id}", params
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def get path, params = {}, result = "visit"
|
28
|
+
response = @client.get "visit", path, params
|
29
|
+
result ? response[result] : response
|
30
|
+
end
|
31
|
+
|
32
|
+
def post path, params = {}, result = "visit"
|
33
|
+
response = @client.post "visit", path, params
|
34
|
+
result ? response[result] : response
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/ruby-pardot.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'crack'
|
3
|
+
require 'cgi'
|
4
|
+
|
5
|
+
require 'pardot/http'
|
6
|
+
require 'pardot/error'
|
7
|
+
require 'pardot/authentication'
|
8
|
+
|
9
|
+
require 'pardot/objects/lists'
|
10
|
+
require 'pardot/objects/opportunities'
|
11
|
+
require 'pardot/objects/prospects'
|
12
|
+
require 'pardot/objects/users'
|
13
|
+
require 'pardot/objects/visitors'
|
14
|
+
require 'pardot/objects/visitor_activities'
|
15
|
+
require 'pardot/objects/visits'
|
16
|
+
|
17
|
+
require 'pardot/client'
|
data/ruby-pardot.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path("../lib/pardot/version", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "ruby-pardot"
|
6
|
+
s.version = Pardot::VERSION
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ["Dan Cunning"]
|
9
|
+
s.email = ["support@pardot.com"]
|
10
|
+
s.homepage = "http://github.com/pardot/ruby-pardot"
|
11
|
+
s.summary = "Library for interacting with the Pardot API"
|
12
|
+
s.description = "Library for interacting with the Pardot API"
|
13
|
+
|
14
|
+
s.required_rubygems_version = ">= 1.3.6"
|
15
|
+
s.rubyforge_project = "ruby-pardot"
|
16
|
+
|
17
|
+
s.add_dependency "crack"
|
18
|
+
s.add_dependency "httparty"
|
19
|
+
|
20
|
+
s.add_development_dependency "bundler", ">= 1.0.0"
|
21
|
+
s.add_development_dependency "rspec"
|
22
|
+
s.add_development_dependency "fakeweb"
|
23
|
+
|
24
|
+
s.files = `git ls-files`.split("\n")
|
25
|
+
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
26
|
+
s.require_path = 'lib'
|
27
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Pardot::Authentication do
|
4
|
+
|
5
|
+
def create_client
|
6
|
+
@client = Pardot::Client.new "user@test.com", "foo", "bar"
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "authenticate" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@client = create_client
|
13
|
+
|
14
|
+
fake_post "/api/login/version/3?email=user%40test.com&password=foo&user_key=bar",
|
15
|
+
%(<?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="ok" version="1.0">\n <api_key>my_api_key</api_key>\n</rsp>\n)
|
16
|
+
end
|
17
|
+
|
18
|
+
def authenticate
|
19
|
+
@client.authenticate
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return the api key" do
|
23
|
+
authenticate.should == "my_api_key"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should set the api key" do
|
27
|
+
authenticate
|
28
|
+
@client.api_key.should == "my_api_key"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should make authenticated? true" do
|
32
|
+
authenticate
|
33
|
+
@client.authenticated?.should == true
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Pardot::Http do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@client = create_client
|
7
|
+
fake_authenticate @client, "my_api_key"
|
8
|
+
end
|
9
|
+
|
10
|
+
def create_client
|
11
|
+
@client = Pardot::Client.new "user@test.com", "foo", "bar"
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "get" do
|
15
|
+
|
16
|
+
def get object = "foo", path = "/bar", params = {}
|
17
|
+
@client.get object, path, params
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should notice errors and raise them as Pardot::ResponseError" do
|
21
|
+
fake_get "/api/foo/version/3/bar?api_key=my_api_key&format=simple&user_key=bar",
|
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
|
+
lambda { get }.should raise_error(Pardot::ResponseError)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should catch and reraise SocketErrors as Pardot::NetError" do
|
28
|
+
Pardot::Client.should_receive(:get).and_raise(SocketError)
|
29
|
+
|
30
|
+
lambda { get }.should 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?api_key=my_api_key&format=simple&user_key=bar",
|
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
|
+
|
37
|
+
@client.should_receive(:handle_expired_api_key)
|
38
|
+
get
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "post" do
|
44
|
+
|
45
|
+
def post object = "foo", path = "/bar", params = {}
|
46
|
+
@client.post object, path, params
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should notice errors and raise them as Pardot::ResponseError" do
|
50
|
+
fake_post "/api/foo/version/3/bar?api_key=my_api_key&format=simple&user_key=bar",
|
51
|
+
%(?xml version="1.0" encoding="UTF-8"?>\n<rsp stat="fail" version="1.0">\n <err code="15">Login failed</err>\n</rsp>\n)
|
52
|
+
|
53
|
+
lambda { post }.should raise_error(Pardot::ResponseError)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should catch and reraise SocketErrors as Pardot::NetError" do
|
57
|
+
Pardot::Client.should_receive(:post).and_raise(SocketError)
|
58
|
+
|
59
|
+
lambda { post }.should raise_error(Pardot::NetError)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should call handle_expired_api_key when the api key expires" do
|
63
|
+
fake_post "/api/foo/version/3/bar?api_key=my_api_key&format=simple&user_key=bar",
|
64
|
+
%(?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)
|
65
|
+
|
66
|
+
@client.should_receive(:handle_expired_api_key)
|
67
|
+
post
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
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?api_key=my_api_key&id_greater_than=200&format=simple&user_key=bar", sample_results
|
31
|
+
|
32
|
+
@client.lists.query(:id_greater_than => 200).should == {"total_results" => 2,
|
33
|
+
"list"=>[
|
34
|
+
{"name"=>"Asdf List"},
|
35
|
+
{"name"=>"Qwerty List"}
|
36
|
+
]}
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Pardot::Objects::Opportunities 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
|
+
<opportunity>
|
16
|
+
<name>Jim</name>
|
17
|
+
<type>Great</type>
|
18
|
+
</opportunity>
|
19
|
+
<opportunity>
|
20
|
+
<name>Sue</name>
|
21
|
+
<type>Good</type>
|
22
|
+
</opportunity>
|
23
|
+
</result>
|
24
|
+
</rsp>)
|
25
|
+
end
|
26
|
+
|
27
|
+
before do
|
28
|
+
@client = create_client
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should take in some arguments" do
|
32
|
+
fake_get "/api/opportunity/version/3/do/query?api_key=my_api_key&id_greater_than=200&format=simple&user_key=bar", sample_results
|
33
|
+
|
34
|
+
@client.opportunities.query(:id_greater_than => 200).should == {"total_results" => 2,
|
35
|
+
"opportunity"=>[
|
36
|
+
{"type"=>"Great", "name"=>"Jim"},
|
37
|
+
{"type"=>"Good", "name"=>"Sue"}
|
38
|
+
]}
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "create_by_email" do
|
44
|
+
|
45
|
+
def sample_results
|
46
|
+
%(<?xml version="1.0" encoding="UTF-8"?>
|
47
|
+
<rsp stat="ok" version="1.0">
|
48
|
+
<opportunity>
|
49
|
+
<name>Jim</name>
|
50
|
+
<type>Good</type>
|
51
|
+
</opportunity>
|
52
|
+
</rsp>)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should return the prospect" do
|
56
|
+
fake_post "/api/opportunity/version/3/do/create/prospect_email/user@test.com?type=Good&api_key=my_api_key&user_key=bar&format=simple&name=Jim", sample_results
|
57
|
+
|
58
|
+
@client.opportunities.create_by_email("user@test.com", :name => "Jim", :type => "Good").should == {"name"=>"Jim", "type"=>"Good"}
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|