From 2c8eee69f8a2ec777c184dbd391ba750c9feb006 Mon Sep 17 00:00:00 2001 From: Josh Goebel Date: Thu, 26 Feb 2009 07:26:03 -0500 Subject: [PATCH] make lists and array and rip out misc classes into their own file --- TODO | 6 +++++ campaign_monitor.gemspec | 3 +++ lib/campaign_monitor.rb | 44 +----------------------------- lib/campaign_monitor/campaign.rb | 17 ++++++++---- lib/campaign_monitor/misc.rb | 46 ++++++++++++++++++++++++++++++++ test/campaign_test.rb | 10 ++++--- 6 files changed, 75 insertions(+), 51 deletions(-) create mode 100644 TODO create mode 100644 lib/campaign_monitor/misc.rb diff --git a/TODO b/TODO new file mode 100644 index 0000000..80ca16f --- /dev/null +++ b/TODO @@ -0,0 +1,6 @@ +* Decide on convents about when to raise and when to return true/false + + So far I've kind of taken the stance if we're retrieving a list and there + are only two possible failures (APIKey or primary key) to raise if there + is an error but for update/save/create operations to return true/false + and then let the user probe @object.result for more details \ No newline at end of file diff --git a/campaign_monitor.gemspec b/campaign_monitor.gemspec index 22ff776..738224b 100644 --- a/campaign_monitor.gemspec +++ b/campaign_monitor.gemspec @@ -24,9 +24,11 @@ Gem::Specification.new do |s| 'MIT-LICENSE', 'Rakefile', 'README.rdoc', + 'TODO', 'lib/campaign_monitor.rb', 'lib/campaign_monitor/base.rb', + 'lib/campaign_monitor/misc.rb', 'lib/campaign_monitor/campaign.rb', 'lib/campaign_monitor/client.rb', 'lib/campaign_monitor/helpers.rb', @@ -41,6 +43,7 @@ Gem::Specification.new do |s| 'support/faster-xml-simple/test/xml_simple_comparison_test.rb', 'test/campaign_monitor_test.rb', + 'test/campaign_test.rb', 'test/client_test.rb', 'test/list_test.rb', 'test/test_helper.rb' diff --git a/lib/campaign_monitor.rb b/lib/campaign_monitor.rb index c96311c..2422ce6 100644 --- a/lib/campaign_monitor.rb +++ b/lib/campaign_monitor.rb @@ -7,6 +7,7 @@ require File.join(File.dirname(__FILE__), '../support/class_enhancements.rb') require File.join(File.dirname(__FILE__), 'campaign_monitor/helpers.rb') +require File.join(File.dirname(__FILE__), 'campaign_monitor/misc.rb') require File.join(File.dirname(__FILE__), 'campaign_monitor/base.rb') require File.join(File.dirname(__FILE__), 'campaign_monitor/client.rb') require File.join(File.dirname(__FILE__), 'campaign_monitor/list.rb') @@ -234,49 +235,6 @@ def using_soap response end - # Encapsulates - class SubscriberBounce #:nodoc: - attr_reader :email_address, :bounce_type, :list_id - - def initialize(email_address, list_id, bounce_type) - @email_address = email_address - @bounce_type = bounce_type - @list_id = list_id - end - end - - # Encapsulates - class SubscriberOpen #:nodoc: - attr_reader :email_address, :list_id, :opens - - def initialize(email_address, list_id, opens) - @email_address = email_address - @list_id = list_id - @opens = opens - end - end - - # Encapsulates - class SubscriberClick #:nodoc: - attr_reader :email_address, :list_id, :clicked_links - - def initialize(email_address, list_id, clicked_links) - @email_address = email_address - @list_id = list_id - @clicked_links = clicked_links - end - end - - # Encapsulates - class SubscriberUnsubscribe #:nodoc: - attr_reader :email_address, :list_id - - def initialize(email_address, list_id) - @email_address = email_address - @list_id = list_id - end - end - protected def wsdl_driver_factory diff --git a/lib/campaign_monitor/campaign.rb b/lib/campaign_monitor/campaign.rb index f4372b9..f3742cf 100644 --- a/lib/campaign_monitor/campaign.rb +++ b/lib/campaign_monitor/campaign.rb @@ -24,9 +24,6 @@ class CampaignMonitor # * Campaign.GetSubscriberClicks # * Campaign.GetUnsubscribes # * Campaign.GetSummary - # - # === Not yet supported - # # class Campaign < Base include CampaignMonitor::Helpers @@ -71,9 +68,19 @@ def Send(options={}) @result.success? end - def add_list(list) + def GetLists + handle_response(@cm_client.Campaign_GetLists(:CampaignID => id)) do |response| + @result=Result.new(response) + if @result.success? + @lists=response["List"].collect{|l| List.new({"ListID" => l["ListID"], "Title" => l["Name"]})} + end + end + end + + def lists + # pull down the list of lists if we have an id + self.GetLists if @lists.nil? and id @lists||=[] - @lists << list end # Example diff --git a/lib/campaign_monitor/misc.rb b/lib/campaign_monitor/misc.rb new file mode 100644 index 0000000..70fd911 --- /dev/null +++ b/lib/campaign_monitor/misc.rb @@ -0,0 +1,46 @@ +class CampaignMonitor + + # Encapsulates + class SubscriberBounce #:nodoc: + attr_reader :email_address, :bounce_type, :list_id + + def initialize(email_address, list_id, bounce_type) + @email_address = email_address + @bounce_type = bounce_type + @list_id = list_id + end + end + + # Encapsulates + class SubscriberOpen #:nodoc: + attr_reader :email_address, :list_id, :opens + + def initialize(email_address, list_id, opens) + @email_address = email_address + @list_id = list_id + @opens = opens + end + end + + # Encapsulates + class SubscriberClick #:nodoc: + attr_reader :email_address, :list_id, :clicked_links + + def initialize(email_address, list_id, clicked_links) + @email_address = email_address + @list_id = list_id + @clicked_links = clicked_links + end + end + + # Encapsulates + class SubscriberUnsubscribe #:nodoc: + attr_reader :email_address, :list_id + + def initialize(email_address, list_id) + @email_address = email_address + @list_id = list_id + end + end + +end \ No newline at end of file diff --git a/test/campaign_test.rb b/test/campaign_test.rb index 4e5acbd..d58b15d 100644 --- a/test/campaign_test.rb +++ b/test/campaign_test.rb @@ -28,6 +28,8 @@ def test_finds_named_campaign @campaign=@client.campaigns.detect { |x| x["Subject"] == "Big Deal" } assert_not_nil @campaign assert_equal 1, @campaign["TotalRecipients"] + assert_equal 1, @campaign.lists.size + assert_equal Hash.new, @campaign.lists.first["Title"] end def test_summary_interface @@ -60,8 +62,8 @@ def test_creating_a_campaign @chicken.Create assert_success @chicken.result - @campaign.add_list @beef - @campaign.add_list @chicken + @campaign.lists << @beef + @campaign.lists << @chicken @campaign["CampaignName"]="Noodles #{secure_digest(Time.now.to_s)}" @campaign["CampaignSubject"]="Noodly #{secure_digest(Time.now.to_s)}" puts @campaign.inspect @@ -75,10 +77,12 @@ def test_creating_a_campaign assert_success @campaign.result assert_not_nil @campaign.id assert_equal 32, @campaign.id.length + # test GetLists + @campaign.instance_variable_set("@lists",nil) + assert_equal 2, @campaign.lists.size # test sending @campaign.Send("ConfirmationEmail" => "george@aol.com", "SendDate" => "Immediately") assert_success @campaign.result - end def test_GetSummary