diff --git a/lib/pardot/client.rb b/lib/pardot/client.rb index 914dbff..63ee5e4 100644 --- a/lib/pardot/client.rb +++ b/lib/pardot/client.rb @@ -9,6 +9,8 @@ class Client include Authentication include Http + include Objects::Accounts + include Objects::Campaigns include Objects::Emails include Objects::Lists include Objects::ListMemberships diff --git a/lib/pardot/objects/accounts.rb b/lib/pardot/objects/accounts.rb new file mode 100644 index 0000000..454e19e --- /dev/null +++ b/lib/pardot/objects/accounts.rb @@ -0,0 +1,32 @@ +module Pardot + module Objects + module Accounts + def accounts + @accounts ||= Accounts.new self + end + + class Accounts + + def initialize client + @client = client + end + + def read params = {} + get "/do/read", params + end + + protected + + def get path, params = {}, result = "account" + response = @client.get "account", path, params + result ? response[result]: response + end + + def post path, params = {}, result = "account" + response = @client.post "account", path, params + result ? response[result] : response + end + end + end + end +end diff --git a/lib/pardot/objects/campaigns.rb b/lib/pardot/objects/campaigns.rb new file mode 100644 index 0000000..3acd72c --- /dev/null +++ b/lib/pardot/objects/campaigns.rb @@ -0,0 +1,50 @@ +module Pardot + module Objects + module Campaigns + def campaigns + @campaigns ||= Campaigns.new self + end + + class Campaigns + + def initialize(client) + @client = client + end + + def query(search_criteria) + result = get('/do/query', search_criteria, 'result') + result['total_results'] = result['total_results'].to_i if result['total_results'] + result + end + + def create(params={}) + post('/do/create', params) + end + + # read_by_id + # update_by_id + [:read, :update].each do |verb| + define_method(verb) do |id, params ={}| + post(api_url(verb, 'id', id), params) + end + end + + private + + def api_url(verb, direct_to, value) + "/do/#{verb}/#{direct_to}/#{value}" + end + + def get(path, params={}, result='campaign') + response = @client.get('campaign', path, params) + result ? response[result] : response + end + + def post(path, params={}, result='campaign') + response = @client.post('campaign', path, params) + result ? response[result] : response + end + end + end + end +end diff --git a/lib/ruby-pardot.rb b/lib/ruby-pardot.rb index cb44ecb..9682e33 100644 --- a/lib/ruby-pardot.rb +++ b/lib/ruby-pardot.rb @@ -6,6 +6,8 @@ require 'pardot/error' require 'pardot/authentication' +require 'pardot/objects/accounts' +require 'pardot/objects/campaigns' require 'pardot/objects/emails' require 'pardot/objects/lists' require 'pardot/objects/list_memberships' diff --git a/spec/pardot/objects/accounts_spec.rb b/spec/pardot/objects/accounts_spec.rb new file mode 100644 index 0000000..084ef85 --- /dev/null +++ b/spec/pardot/objects/accounts_spec.rb @@ -0,0 +1,29 @@ +require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper') + +describe Pardot::Objects::Accounts do + before do + @client = create_client + end + + describe "read" do + + def sample_results + %(\n + + 123 + Test Company + + ) + end + + before do + @client = create_client + end + + it "should read the account" do + fake_get "/api/account/version/3/do/read?user_key=bar&api_key=my_api_key&format=simple", sample_results + + @client.accounts.read.should == {"id" => "123", "company" => "Test Company"} + end + end +end diff --git a/spec/pardot/objects/campaigns_spec.rb b/spec/pardot/objects/campaigns_spec.rb new file mode 100644 index 0000000..a66ccba --- /dev/null +++ b/spec/pardot/objects/campaigns_spec.rb @@ -0,0 +1,111 @@ +require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper') + +describe Pardot::Objects::Campaigns do + before do + @client = create_client + end + + describe "query" do + + def sample_results + %(\n + + 2 + + 123 + First Campaign + 5 + + + 321 + Second Campaign + 0 + + + ) + end + + before do + @client = create_client + end + + it "should query the campaigns" do + fake_get "/api/campaign/version/3/do/query?id_less_than=555&user_key=bar&api_key=my_api_key&format=simple", sample_results + + @client.campaigns.query({"id_less_than" => "555"}).should == {"total_results"=>2, + "campaign"=>[ + {"id"=>"123", "name"=>"First Campaign", "cost"=>"5"}, + {"id"=>"321", "name"=>"Second Campaign", "cost"=>"0"} + ]} + end + end + + describe "create" do + + def sample_results + %(\n + + 123 + New Campaign + 5 + + ) + end + + before do + @client = create_client + end + + it "should create the campaign" do + fake_post "/api/campaign/version/3/do/create?name=New%20Campaign&cost=5&user_key=bar&api_key=my_api_key&format=simple", sample_results + + @client.campaigns.create({"name" => "New Campaign", "cost" => "5"}).should == {"id" => "123", "name" => "New Campaign", "cost" => "5"} + end + end + + describe "read" do + + def sample_results + %(\n + + 123 + Test Campaign + 0 + + ) + end + + before do + @client = create_client + end + + it "should read the campaign by id" do + fake_post "/api/campaign/version/3/do/read/id/123?user_key=bar&api_key=my_api_key&format=simple", sample_results + + @client.campaigns.read(123).should == {"id" => "123", "name" => "Test Campaign", "cost" => "0"} + end + end + + describe "update" do + + def sample_results + %(\n + + 123 + Test Campaign Updated + 0 + + ) + end + + before do + @client = create_client + end + + it "should update the campaign by id" do + fake_post "/api/campaign/version/3/do/update/id/123?name=Test%20Campaign%20Updated&user_key=bar&api_key=my_api_key&format=simple", sample_results + + @client.campaigns.update(123, {"name" => "Test Campaign Updated"}).should == {"id" => "123", "name" => "Test Campaign Updated", "cost" => "0"} + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 9300773..0df7031 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,6 +6,7 @@ require 'crack' require 'httparty' -require 'ruby-pardot' - +Dir["#{File.dirname(__FILE__)}/../lib/pardot/objects/**/*.rb"].each { |f| require f } Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } + +require 'ruby-pardot'