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.
@@ -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
@@ -0,0 +1,3 @@
1
+ module Pardot
2
+ VERSION = "1.0"
3
+ end
@@ -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'
@@ -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