gnumarcelo-campaigning 0.7.0 → 0.8.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/README.rdoc CHANGED
@@ -1,16 +1,47 @@
1
- == THIS GEM IS UNDER DEVELOPMENT
2
-
3
- = campaigning
1
+ = Campaigning
4
2
 
5
3
  This RubyGem provides access to the CampaignMonitor API(www.campaignmonitor.com/api) using SOAP.
6
4
 
7
- == Dependencies
8
- This gem requires the following gems
5
+
6
+ == Pre-requisites
7
+ An account with Campaign Monitor and the API Key (www.campaignmonitor.com).
8
+
9
+
10
+ == Resources
11
+
12
+ === Dependencies
13
+
14
+ This gem requires the following gems:
9
15
 
10
16
  Soap4r (1.5.8)
11
17
 
12
18
  Jeweler (http://technicalpickles.com/posts/craft-the-perfect-gem-with-jeweler)
13
19
 
20
+ === Installing
21
+
22
+ sudo gem install gnumarcelo-campaigning -s http://gems.github.com
23
+
24
+
25
+ == How to play
26
+
27
+ Just set a constant named *CAMPAIGN_MONITOR_API_KEY* with your Campaign monitor API key and start to play like the examples below:
28
+
29
+ Sample use of the Client class:
30
+
31
+ #Here is how to get a list of all clients...
32
+ clients = Campaigning::Client.get_all_clients
33
+
34
+
35
+ #Here is how to create a brand new subscriber list for an Client
36
+ client = Campaigning::Client.find_by_name("Client One Company")
37
+ list = Campaigning::List.create(
38
+ :client_id => client.clientID,
39
+ :title => "List of people from Brazil",
40
+ :comfirm_opt_in => false
41
+ )
42
+
43
+ For further examples please check at the *sample* directory.
44
+
14
45
 
15
46
  == Copyright
16
47
 
data/Rakefile CHANGED
@@ -53,5 +53,7 @@ Rake::RDocTask.new do |rdoc|
53
53
  rdoc.title = "campaigning #{version}"
54
54
  rdoc.rdoc_files.include('README*')
55
55
  rdoc.rdoc_files.include('lib/**/*.rb')
56
+ rdoc.rdoc_files.exclude('lib/campaigning/soap/generated/*.rb')
57
+ rdoc.options << "--inline-source"
56
58
  end
57
59
 
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
- :minor: 7
3
+ :minor: 8
4
4
  :patch: 0
@@ -7,37 +7,29 @@ require File.expand_path(File.dirname(__FILE__)) + '/types/list.rb'
7
7
  require File.expand_path(File.dirname(__FILE__)) + '/helpers/helpers.rb'
8
8
 
9
9
  module Campaigning
10
- class Base
11
10
  include Helpers
12
- attr_reader :api_key
13
11
 
14
- def initialize(options = {})
15
- options = {
16
- :api_key => CAMPAIGN_MONITOR_API_KEY,
17
- :debug => false
18
- }.merge(options)
19
- @api_key = options[:api_key]
20
- @soap = Campaigning::SOAPDriver.instance.get_driver
21
- setup_debug_mode options[:debug]
12
+ #Gets the server system time for your time zone.
13
+ #This is handy for when you are syncing your {Campaign Monitor}[http://www.campaignmonitor.com] lists with some other in-house list,
14
+ #allowing you accurately determine the time on our server when you carry out the synchronization.
15
+ def self.system_date
16
+ response = Campaigning::SOAPDriver.instance.get_driver.getSystemDate(:apiKey => CAMPAIGN_MONITOR_API_KEY)
17
+ dateTime = Helpers.handle_request response.user_GetSystemDateResult
22
18
  end
23
-
24
- def clients
25
- response = @soap.getClients(:apiKey => @api_key)
26
- clients = handle_request response.user_GetClientsResult
27
- clients.collect {|client| Client.new(client.clientID, client.name)}
28
- end
29
-
30
- def system_date
31
- handle_request @soap.getSystemDate(:apiKey => @api_key).user_GetSystemDateResult
19
+
20
+ #This method returns an Array of Strings representing all the available timezones.
21
+ def self.time_zones
22
+ Helpers.handle_request Campaigning::SOAPDriver.instance.get_driver.getTimezones(:apiKey => CAMPAIGN_MONITOR_API_KEY).user_GetTimezonesResult
32
23
  end
33
24
 
34
- def time_zones
35
- handle_request @soap.getTimezones(:apiKey => @api_key).user_GetTimezonesResult
25
+ #This method returns an Array of Strings representing all the available countries.
26
+ def self.countries
27
+ response = Campaigning::SOAPDriver.instance.get_driver.getCountries(:apiKey => CAMPAIGN_MONITOR_API_KEY)
28
+ dateTime = Helpers.handle_request response.user_GetCountriesResult
36
29
  end
37
30
 
38
- def setup_debug_mode(dev)
31
+ #This method turns on and off the API debug mode, which will display at the console all SOAP requests made to the API server.
32
+ def self.setup_debug_mode(dev)
39
33
  Campaigning::SOAPDriver.instance.setup_debug_mode dev
40
- end
41
-
42
- end
34
+ end
43
35
  end
@@ -1,14 +1,19 @@
1
- module Helpers
2
-
3
- def handle_request(response)
4
- Helpers.handle_request response
1
+ module Campaigning
2
+ module Helpers
3
+ #Method responsable to handle all response from the API server and raising an exception when
4
+ #the API returns an error code (different from 0 (zero) ).
5
+ def handle_request(response)
6
+ Helpers.handle_request response
7
+ end
8
+
9
+ #Method responsable to handle all response from the API server and raising an exception when
10
+ #the API returns an error code (different from 0 (zero) ).
11
+ def Helpers.handle_request(response)
12
+ if (response.class == Campaigning::Result && response.code != 0)
13
+ raise response.code.to_s + " - " + response.message
5
14
  end
6
-
7
- def Helpers.handle_request(response)
8
- if (response.class == Campaigning::Result && response.code != 0)
9
- raise response.code.to_s + " - " + response.message
10
- end
11
- response
12
- end
13
-
14
- end
15
+ response
16
+ end
17
+
18
+ end
19
+ end
@@ -2,14 +2,20 @@ require File.expand_path(File.dirname(__FILE__)) + '/generated/defaultDriver.rb'
2
2
  require 'singleton'
3
3
 
4
4
  module Campaigning
5
+ #A SOAPDriver is a singleton object responsable to supply a way to interact with the SOAP::RPC::Driver object.
5
6
  class SOAPDriver #It could be a module
6
7
  include Singleton
7
8
  DefaultEndpointUrl = "http://api.createsend.com/api/api.asmx"
8
9
 
10
+ #Return a unique Campaigning::SOAP::ApiSoap instance for the whole API client, which provides access to
11
+ #all the Campaign Monitor API methods.
9
12
  def get_driver
10
13
  @driver ||= Campaigning::ApiSoap.new(DefaultEndpointUrl)
11
14
  end
12
15
 
16
+ #This method turns the API debug mode to _on_ and _off_.
17
+ #When method called with _true_ argument, it will switch to _on_ mode, the API will display at the console all
18
+ #SOAP requests made to the API server.
13
19
  def setup_debug_mode(dev)
14
20
  dev = STDERR if dev == true
15
21
  @driver.wiredump_dev = dev
@@ -20,6 +20,29 @@ module Campaigning
20
20
  @soap = Campaigning::SOAPDriver.instance.get_driver
21
21
  end
22
22
 
23
+ #Creates a campaign for an existing client. This campaign will be imported and ready to send to the subscribers in
24
+ #the specified lists and segments.
25
+ #The campaign must have both HTML and plain text content, imported from the internet. Styling for the HTML content
26
+ #will be automatically brought inline.
27
+ #
28
+ #Available _params_ argument are:
29
+ # * :clientID - The ID of the Client you want to create a campaign
30
+ # * :campaignName - The name of the new campaign. This must be unique across all draft campaigns for the client.
31
+ # * :campaignSubject - The subject of the new campaign.
32
+ # * :fromName - The name to appear in the From field in the recipients email client when they receive the new campaign.
33
+ # * :fromEmail - The email address that the new campaign will come from.
34
+ # * :replyTo - The email address that any replies to the new campaign will be sent to.
35
+ # * :htmlUrl - The URL of the HTML content for the new campaign. If no unsubscribe link is found then one will be added automatically. Styling in
36
+ # the campaign will be automatically brought inline. If your URL has querystring values, you will need to encode them.
37
+ # * :textUrl - The URL of the Text content for the new campaign. If no unsubscribe link is found then one will be added automatically.
38
+ # * :subscriberListIDs - An array of lists to send the campaign to. See http://www.campaignmonitor.com/api/required/#listid for more details.
39
+ # * :listSegments - An array of Segment Names and their appropriate List ID s to send the campaign to.
40
+ #
41
+ #*Return*:
42
+ #
43
+ #*Success*: Upon a successful call, this method will return a Campaigning::Campaign object which was recently created.
44
+ #
45
+ #*Error*: An Exception containing the cause of the error will be raised.
23
46
  def self.create(params)
24
47
  response = Campaigning::SOAPDriver.instance.get_driver.createCampaign(
25
48
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
@@ -39,36 +62,118 @@ module Campaigning
39
62
  Campaign.new campaign_id
40
63
  end
41
64
 
65
+ #Gets a list of all subscribers who bounced for a given campaign, and the type of bounce (H=Hard Bounce, S=Soft Bounce).
66
+ #
67
+ #*Return*:
68
+ #
69
+ #*Success*: Upon a successful call, this method will return a collection of <code>SubscriberBounce</code> objects, each of
70
+ #which consists of the subscribers <code>:emailAddress</code>, the <code>listID</code> they belong to, and the <code>bounceType</code>
71
+ #of bounce they experienced, whether hard or soft.
72
+ #
73
+ #*Error*: An Exception containing the cause of the error will be raised.
42
74
  def bounces
43
75
  response = @soap.getCampaignBounces(:apiKey => CAMPAIGN_MONITOR_API_KEY, :campaignID => @campaignID )
44
76
  handle_request response.campaign_GetBouncesResult
45
77
  end
46
78
 
79
+ #Returns an array of Campaigning::List objects that a given campaign was sent to.
80
+ #
81
+ #*Return*:
82
+ #
83
+ #*Success*: Upon a successful call, this method will return a collection of Campaigning::List object.
84
+ #
85
+ #*Error*: An Exception containing the cause of the error will be raised.
47
86
  def lists
48
87
  response = @soap.getCampaignLists(:apiKey => CAMPAIGN_MONITOR_API_KEY, :campaignID => @campaignID )
49
- handle_request response.campaign_GetListsResult
88
+ lists = handle_request response.campaign_GetListsResult
89
+ puts "LISTAS!!!!!!!!!!" + lists.inspect
90
+ lists.collect do |list|
91
+ List.new(list.listID, list.name)
92
+ end
50
93
  end
51
94
 
95
+ #Gets a list of all subscribers who opened a given campaign, and the number of times they opened the campaign.
96
+ #
97
+ #*Return*:
98
+ #
99
+ #*Success*: Upon a successful call, this method will return a collection of <code>SubscriberOpen</code> objects, each of
100
+ #which consists of the subscribers <code>:emailAddress</code>, the <code>listID</code> they belong to, and the <code>numberOfOpens</code>
101
+ #representing the number of times they opened the given campaign.
102
+ #
103
+ #*Error*: An Exception containing the cause of the error will be raised.
52
104
  def opens
53
105
  response = @soap.getCampaignOpens(:apiKey => CAMPAIGN_MONITOR_API_KEY, :campaignID => @campaignID )
54
106
  handle_request response.campaign_GetOpensResult
55
107
  end
56
108
 
109
+ #Gets a list of all subscribers who clicked a link for a given campaign, the ID of the list they belong to,
110
+ #the links they clicked, and the number of times they clicked the link.
111
+ #
112
+ #Example of usage:
113
+ #
114
+ # campaign_obj.subscriber_clicks.each do |subscriber|
115
+ # puts "Subscriber: #{subscriber.emailAddress}"
116
+ # subscriber.clickedLinks.each do |clicked|
117
+ # puts "Clicked link: #{clicked.link} - Number of clicks: #{clicked.clicks}"
118
+ # end
119
+ # end
120
+ #
121
+ #
122
+ #*Return*:
123
+ #
124
+ #*Success*: Upon a successful call, this method will return a collection of <code>SubscriberClick</code> objects, each of which consists of
125
+ #the subscribers <code>emailAddress</code>, the <code>listID</code> representing list they belong to, and the <code>clickedLinks</code>array
126
+ #representing the links they have clicked and the number of times they clicked each link.
127
+ #
128
+ #*Error*: An Exception containing the cause of the error will be raised.
57
129
  def subscriber_clicks
58
130
  response = @soap.getSubscriberClicks(:apiKey => CAMPAIGN_MONITOR_API_KEY, :campaignID => @campaignID )
59
131
  handle_request response.campaign_GetSubscriberClicksResult
60
132
  end
61
133
 
134
+ #Gets a statistical summary, including number of recipients and open count, for a given campaign.
135
+ #
136
+ #*Return*:
137
+ #
138
+ #*Success*: Upon a successful call, this method will return summary statistical values about this particular campaign
139
+ #including the number of recipients, the number of total opens, the number of link clicks, the number of recipients
140
+ #who unsubscribed and the number who bounced.
141
+ #
142
+ #*Error*: An Exception containing the cause of the error will be raised.
62
143
  def summary
63
144
  response = @soap.getCampaignSummary(:apiKey => CAMPAIGN_MONITOR_API_KEY, :campaignID => @campaignID )
64
145
  handle_request response.campaign_GetSummaryResult
65
146
  end
66
147
 
148
+ #Gets a list of all subscribers who unsubscribed for a given campaign.
149
+ #
150
+ #*Return*:
151
+ #
152
+ #*Success*: Upon a successful call, this method will return a collection of SubscriberUnsubscribe objects, each of which consists
153
+ #of the <code>emailAddress</code> representing subscribers email address and the <code>listID</code> representing the list they belong to.
154
+ #
155
+ #*Error*: An Exception containing the cause of the error will be raised.
67
156
  def unsubscribes
68
157
  response = @soap.getCampaignUnsubscribes(:apiKey => CAMPAIGN_MONITOR_API_KEY, :campaignID => @campaignID )
69
158
  handle_request response.campaign_GetUnsubscribesResult
70
159
  end
71
160
 
161
+ #Schedules an existing campaign for sending.
162
+ #
163
+ #The campaign must be imported with defined recipients. For campaigns with more than 5 recipients the user must have
164
+ #sufficient credits or their credit card details saved within the application for the campaign to be sent via the API.
165
+ #For campaigns with 5 recipients or less the user must have enough test campaigns remaining in their API account.
166
+ #For further information about credits for campaigns please check at: http://www.campaignmonitor.com/api/method/campaign-send/
167
+ #
168
+ #Available _params_ argument are:
169
+ # * :confirmation_email - The email address that the confirmation email that the campaign has been sent will go to.
170
+ # * :send_date - The date the campaign should be scheduled to be sent. To send a campaign immediately pass in "Immediately".
171
+ # This date should be in the users timezone and formatted as YYYY-MM-DD HH:MM:SS.
172
+ #
173
+ #*Return*:
174
+ #Upon a successful call, this method will return a Result object with the newly create Campaign's ID as the Code.
175
+ #
176
+ #*Error*: An Exception containing the cause of the error will be raised.
72
177
  def send(params)
73
178
  response = @soap.sendCampaign(
74
179
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
@@ -12,28 +12,84 @@ class Client
12
12
  def initialize(clientID = nil, name = nil)
13
13
  @clientID = clientID
14
14
  @name = name
15
- #@cm = Campaigning::Base.new
16
15
  @soap = Campaigning::SOAPDriver.instance.get_driver
17
16
  end
18
17
 
18
+ #Gets a list of all subscriber lists for a client.
19
+ #
20
+ #*Return*:
21
+ #
22
+ #*Success*: Upon a successful call, this method will return a collection of Campaigning::List objects.
23
+ #
24
+ #*Error*: An Exception containing the cause of the error will be raised.
19
25
  def lists
20
26
  response = @soap.getClientLists(:apiKey => CAMPAIGN_MONITOR_API_KEY, :clientID => @clientID)
21
27
  lists = handle_request response.client_GetListsResult
22
28
  lists.collect {|list| List.new(list.listID, list.name)}
23
29
  end
24
30
 
31
+ #This method find a List by a given name
32
+ #
33
+ #*Return*:
34
+ #
35
+ #*Success*:
36
+ #
37
+ #List FOUND: If it found any client with the given name it will return a Campaigning::List object containing the found list.
38
+ #
39
+ #List NOT FOUND: If it doesn't found a list with the given name it will return +nil+ .
40
+ #
41
+ #*Error*: An Exception containing the cause of the error will be raised.
25
42
  def find_list_by_name(list_name)
26
43
  lists.find {|list| list_name == list.name}
27
44
  end
28
45
 
29
- # TODO: Refactor this method and increase performance?
30
- # TODO: Tha campaign monitor permit two users with the same name, what to do?
46
+ #This method find a Client by a given name
47
+ #
48
+ #*Return*:
49
+ #
50
+ #Client FOUND: If it found any client with the given name it will return a Campaigning::Client object containing the found client.
51
+ #
52
+ #Client NOT FOUND: If it doesn't found a client with the given name it will return +nil+ .
53
+ #
54
+ #*Error*: An Exception containing the cause of the error will be raised.
55
+ #-- TODO: Refactor this method and increase performance?
56
+ #-- TODO: Tha campaign monitor permit two users with the same name, what to do?
31
57
  def self.find_by_name(name)
32
- client_list = Helpers.handle_request Campaigning::Base.new.clients
58
+ client_list = Client.get_all_clients
33
59
  client_found = client_list.find {|client| name == client.name}
34
60
  Client.new(client_found.clientID, client_found.name) if client_found
35
61
  end
36
62
 
63
+ #Gets all clients for a given user (CAMPAIGN_MONITOR_API_KEY).
64
+ #
65
+ #*Return*:
66
+ #
67
+ #*Success*: Upon a successful call, this method will return a collection of Campaigning::Client objects.
68
+ #
69
+ #*Error*: An Exception containing the cause of the error will be raised.
70
+ def self.get_all_clients
71
+ response = Campaigning::SOAPDriver.instance.get_driver.getClients(:apiKey => CAMPAIGN_MONITOR_API_KEY)
72
+ clients = Helpers.handle_request response.user_GetClientsResult
73
+ clients.collect {|client| Client.new(client.clientID, client.name)}
74
+ end
75
+
76
+ #This method creates a brand new client with no access to the application.
77
+ #By default a new client has no direct access to the application. Access and billing settings (if needed) must be set by
78
+ #means of a subsequent call to Campaigning::Client#update_access_and_billing.
79
+ #
80
+ #Available _params_ argument are:
81
+ # * :company_name - The client company name.
82
+ # * :contact_name - The personal name of the principle contact for this client.
83
+ # * :email_address - An email address to which this client will be sent application-related emails.
84
+ # * :country - This client's country. A valid country list is available in http://www.campaignmonitor.com/api/countries/ or by
85
+ # using the API procedure Campaigning.countries
86
+ # * :time_zone - Client timezone for tracking and reporting data. A valid timezone list is available here or by using the API
87
+ # procedure Campaigning.time_zones.
88
+ #*Return*:
89
+ #
90
+ #*Success*: Upon a successful call, this method will return a Campaigning::Client object representing the newly created client.
91
+ #
92
+ #*Error*: An Exception containing the cause of the error will be raised.
37
93
  def self.create(params)
38
94
  response = Campaigning::SOAPDriver.instance.get_driver.createClient(
39
95
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
@@ -43,33 +99,75 @@ class Client
43
99
  :country => params[:country],
44
100
  :timezone => params[:time_zone]
45
101
  )
46
- Client.new( Helpers.handle_request(response.client_CreateResult) )
102
+ Client.new( Helpers.handle_request(response.client_CreateResult), params[:company_name] )
47
103
  end
48
104
 
105
+ #Deletes a client from your account.
106
+ #
107
+ #*Return*:
108
+ #
109
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
110
+ #containing a successful message.
111
+ #
112
+ #*Error*: An Exception containing the cause of the error will be raised.
49
113
  def delete
50
- Client.delete(@clientID)
51
- self.clientID = nil
52
- self.name = nil
114
+ response = Client.delete(@clientID)
115
+ self.clientID, self.name = nil
116
+ response
53
117
  end
54
118
 
119
+ #Deletes a client from your account.
120
+ #
121
+ #*Return*:
122
+ #
123
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
124
+ #containing a successful message.
125
+ #
126
+ #*Error*: An Exception containing the cause of the error will be raised.
55
127
  def self.delete(client_id)
56
128
  response = Campaigning::SOAPDriver.instance.get_driver.deleteClient(:apiKey => CAMPAIGN_MONITOR_API_KEY, :clientID => client_id)
57
129
  Helpers.handle_request response.client_DeleteResult
58
130
  end
59
131
 
60
- def segments
132
+ #Gets a list of all subscriber segments for a client.
133
+ #
134
+ #*Return*:
135
+ #
136
+ #*Success*: Upon a successful call, this method will return a collection of Campaigning::List objects, each of which consists of the ListID
137
+ #for the parent list and Segment Name for each segment for a client.
138
+ #
139
+ #*Error*: An Exception containing the cause of the error will be raised.
140
+ def segments # TODO: Verify the type return for this method.
61
141
  response = @soap.getClientSegments(:apiKey => CAMPAIGN_MONITOR_API_KEY, :clientID => @clientID )
62
142
  handle_request response.client_GetSegmentsResult
63
143
  end
64
144
 
65
- # TODO: Refactor this method
66
- def find_campaigns_by_subject(subject)
145
+ #This method finds campaigns by a given subject, since the subject isn't unique, it returns an collection of
146
+ #Campaigning::Campaign object.
147
+ #
148
+ #*Return*:
149
+ #
150
+ #*Success*: Upon a successful call, this method will return a collection of Campaigning::Campaign objects.
151
+ #
152
+ #Campaign FOUND: If it found any campaign with the given subject it will return a collection of Campaigning::Campaign that match the criteria.
153
+ #
154
+ #Campaign NOT FOUND: If it doesn't found a campaign with the given subject it will return an empty array.
155
+ #
156
+ #*Error*: An Exception containing the cause of the error will be raised.
157
+ def find_campaigns_by_subject(subject)#-- TODO: Refactor this method
67
158
  arr = []
68
159
  #return campaigns.find {|campaign| subject == campaign.subject} if params[:single]
69
160
  campaigns.each { |campaign| arr << campaign if campaign.subject == subject }
70
161
  arr
71
162
  end
72
163
 
164
+ #Gets a list of all campaigns that have been sent for a client.
165
+ #
166
+ #*Return*:
167
+ #
168
+ #*Success*: Upon a successful call, this method will return a collection of Campaigning::Campaign objects.
169
+ #
170
+ #*Error*: An Exception containing the cause of the error will be raised.
73
171
  def campaigns
74
172
  response = @soap.getClientCampaigns(:apiKey => CAMPAIGN_MONITOR_API_KEY, :clientID => @clientID )
75
173
  campaign_list = handle_request response.client_GetCampaignsResult
@@ -78,32 +176,123 @@ class Client
78
176
  end
79
177
  end
80
178
 
179
+ #This method gets the complete account and billing details for a particular client.
180
+ #
181
+ #Example of usage:
182
+ # client_details = client_obj.details
183
+ # basic_details = client_details.basicDetails
184
+ # access_and_billing_details = client_details.accessAndBilling
185
+ # puts "Basic details:"
186
+ # puts "Client ID: #{basic_details.clientID}\n
187
+ # Company: #{basic_details.companyName}\n
188
+ # Contact: #{basic_details.contactName}\n
189
+ # Country: #{basic_details.country}\n
190
+ # Timezone: #{basic_details.timezone}"
191
+ #
192
+ # puts "Access and Billing Details:"
193
+ # puts "Username: #{access_and_billing_details.username}\n
194
+ # Password: #{access_and_billing_details.password}\n
195
+ # Billing Type: #{access_and_billing_details.billingType}\n
196
+ # Currency: #{access_and_billing_details.currency}\n
197
+ # Delivery Fee: #{access_and_billing_details.deliveryFee}\n
198
+ # Cost per Recipient: #{access_and_billing_details.costPerRecipient}\n
199
+ # Design and Span test Fee: #{access_and_billing_details.designAndSpamTestFee}\n
200
+ # Access Level: #{access_and_billing_details.accessLevel}"
201
+ #
202
+ #*Return*:
203
+ #
204
+ #*Success*: A successful call to this method will return a ClientDetail object, comprised of ClientBasicDetails
205
+ #and ClientAccessAndBilling.
206
+ #
207
+ #*Error*: An Exception containing the cause of the error will be raised.
81
208
  def details
82
209
  response = @soap.getClientDetail(:apiKey => CAMPAIGN_MONITOR_API_KEY, :clientID => @clientID )
83
210
  handle_request response.client_GetDetailResult
84
211
  end
85
212
 
213
+ #Gets all subscribers in the client-wide suppression list.
214
+ #
215
+ #*Return*:
216
+ #
217
+ #*Success*: Upon a successful call, this method will return a collection of Subscriber objects.
218
+ #
219
+ #*Error*: An Exception containing the cause of the error will be raised.
86
220
  def suppression_list
87
221
  response = @soap.getClientSuppressionList(:apiKey => CAMPAIGN_MONITOR_API_KEY, :clientID => @clientID )
88
222
  handle_request response.client_GetSuppressionListResult
89
223
  end
90
224
 
225
+ #Update the access and billing settings of an existing client, leaving the basic details untouched.
226
+ #
227
+ #Here's a list of all the parameters you'll need to pass to the Campaigning::Client#update_access_and_billing method. Only the :+access_level+ parameter
228
+ #is required for all calls. The relevance and necessity of the other parameters depends on the chosen AccessLevel (and BillingType),
229
+ #and will be fully described along with each parameter.
230
+ #
231
+ #Available _params_ argument are:
232
+ # * :access_level - An integer describing the client's ability to access different areas of the application. Influences the significance
233
+ # and requirements of the following parameters. See http://www.campaignmonitor.com/api/method/client-updateaccessandbilling/#accesslevels
234
+ # for a full description of available levels.
235
+ # * :username - Client login username. Not required and ignored if AccessLevel is set to 0.
236
+ # * :password - Client login password. Not required and ignored if AccessLevel is set to 0.
237
+ # * :billing_type - Client billing type, only required if :access_level is set to allow the client to create and send campaigns
238
+ # * :currency - Billing currency for this client, only required if :billing_type is set to either ClientPaysAtStandardRate or
239
+ # ClientPaysWithMarkup. See full details: http://www.campaignmonitor.com/api/method/client-updateaccessandbilling/#currencies.
240
+ # * :delivery_fee - Flat rate delivery fee to be charged to the client for each campaign sent, expressed in the chosen currency's
241
+ # major unit, but without the currency symbol (for example, sending "6.5" means "$6.50" if USD is used). Only
242
+ # required if BillingType is set to ClientPaysWithMarkup, in which case it should be at least equal to the standard rate.
243
+ # Further detail is available at http://help.campaignmonitor.com/topic.aspx?t=118.
244
+ # * :cost_per_recipient - Additional cost added to the campaign for each email address the campaign is sent to, expressed in the chosen
245
+ # currency's minor unit (for example, sending "1.5" means 1.5 cents per email address if USD is used). Only required
246
+ # if BillingType is set to ClientPaysWithMarkup, in which case it should be at least equal to the standard cost/recipient
247
+ # rate. Further detail is available at http://help.campaignmonitor.com/topic.aspx?t=118.
248
+ # * :design_and_spam_test_fee - Expressed in the chosen currency's major unit (for example, sending "10" means "$10" if USD is used). Only required
249
+ # if BillingType is set to ClientPaysWithMarkup and client has access to design and spam tests, in which case the fee
250
+ # should be equal to or higher than the standard rate (identical to the standard DeliveryFee for that currency).
251
+ #
252
+ #
253
+ #
254
+ #Please note that for reasons of security there is no way to set a client's credit card details via the API. It will have to be done in the application.
255
+ #
256
+ #*Return*:
257
+ #
258
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
259
+ #containing a successful message.
260
+ #
261
+ #*Error*: An Exception containing the cause of the error will be raised.
91
262
  def update_access_and_billing(params)
92
263
  response = @soap.updateClientAccessAndBilling(
93
264
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
94
265
  :clientID => @clientID,
95
266
  :accessLevel => params[:access_level],
96
- :username => params[:username],
97
- :password => params[:password],
98
- :billingType => params[:billing_type],
99
- :currency => params[:currency],
100
- :deliveryFee => params[:delivery_fee],
101
- :costPerRecipient => params[:cost_per_recipient],
102
- :designAndSpamTestFee => params[:design_and_spam_test_fee]
267
+ :username => params.fetch(:username, ""),
268
+ :password => params.fetch(:password, ""),
269
+ :billingType => params.fetch(:billing_type, ""),
270
+ :currency => params.fetch(:currency, ""),
271
+ :deliveryFee => params.fetch(:delivery_fee, ""),
272
+ :costPerRecipient => params.fetch(:cost_per_recipient, ""),
273
+ :designAndSpamTestFee => params.fetch(:design_and_spam_test_fee, "")
103
274
  )
104
275
  handle_request response.client_UpdateAccessAndBillingResult
105
276
  end
106
277
 
278
+ #Updates the basic details of an existing client.
279
+ #If you wish to change only some details, the others must be included as they currently are. Please note that the client's existing
280
+ #access and billing details will remain unchanged by a call to this method.
281
+ #
282
+ #Available _params_ argument are:
283
+ # * :company_name - The client company name.
284
+ # * :contact_name - The personal name of the principle contact for this client.
285
+ # * :email_address - An email address to which this client will be sent application-related emails.
286
+ # * :country - This client's country.
287
+ # * :time_zone - Client timezone for tracking and reporting data. Valid timezone strings are obtainable by means of the
288
+ # API procedure Campaigning.time_zones.
289
+ #
290
+ #*Return*:
291
+ #
292
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
293
+ #containing a successful message.
294
+ #
295
+ #*Error*: An Exception containing the cause of the error will be raised.
107
296
  def update_basics(params)
108
297
  response = @soap.updateClientBasics(
109
298
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
@@ -16,6 +16,22 @@ module Campaigning
16
16
  @soap = Campaigning::SOAPDriver.instance.get_driver
17
17
  end
18
18
 
19
+ #Creates a brand new subscriber list
20
+ #
21
+ #Available _params_ argument are:
22
+ # * :client_id - The ID of the client who will owner of the list.
23
+ # * :title - The list title. Must be unique for this client.
24
+ # * :unsubscribe_page - The URL to which subscribers will be directed when unsubscribing from the list.
25
+ # If left blank or omitted a generic unsubscribe page is used.
26
+ # * :comfirm_opt_in - Either true or false depending on whether the list requires email confirmation or not. Please see
27
+ # the help documentation for more details of what this means.
28
+ # * :confirmation_success_page - Successful email confirmations will be redirected to this URL. Ignored if ConfirmOptIn
29
+ # is false. If left blank or omitted a generic confirmation page is used.
30
+ #*Return*:
31
+ #
32
+ #*Success*: Upon a successful call, this method will return a Campaigning::List object representing the newly created list.
33
+ #
34
+ #*Error*: An Exception containing the cause of the error will be raised.
19
35
  def self.create(params)
20
36
  response = Campaigning::SOAPDriver.instance.get_driver.createList(
21
37
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
@@ -29,6 +45,20 @@ module Campaigning
29
45
  List.new(new_list_id, params[:title])
30
46
  end
31
47
 
48
+ #Creates a new custom field for a list
49
+ #
50
+ #Available _params_ argument are:
51
+ # * :field_name - The Name for the new Custom Field. This will be used to generate the custom fields Key.
52
+ # * :data_type - The Data Type for the new Custom Field. This must be one of Text, Number, MultiSelectOne, or MultiSelectMany
53
+ # * :options - The available options for a multi-valued custom field. Options should be an Array of Strings, like: %w[Brazil Ireland England].
54
+ # You can't pass this field for Text and Number custom fields
55
+ #
56
+ #*Return*:
57
+ #
58
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
59
+ #containing a successful message.
60
+ #
61
+ #*Error*: An Exception containing the cause of the error will be raised.
32
62
  def create_custom_field(params)
33
63
  response = @soap.createListCustomField(
34
64
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
@@ -40,32 +70,155 @@ module Campaigning
40
70
  handle_request response.list_CreateCustomFieldResult
41
71
  end
42
72
 
73
+ #Deletes a list
74
+ #
75
+ #*Return*:
76
+ #
77
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
78
+ #containing a successful message.
79
+ #
80
+ #*Error*: An Exception containing the cause of the error will be raised.
43
81
  def delete
44
82
  List.delete(@listID)
45
83
  self.listID, self.name = nil, nil
46
84
  end
47
85
 
86
+ #Deletes a list
87
+ #
88
+ #*Return*:
89
+ #
90
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
91
+ #containing a successful message.
92
+ #
93
+ #*Error*: An Exception containing the cause of the error will be raised.
48
94
  def self.delete(list_id)
49
95
  response = Campaigning::SOAPDriver.instance.get_driver.deleteList(:apiKey => CAMPAIGN_MONITOR_API_KEY, :listID => list_id)
50
96
  Helpers.handle_request response.list_DeleteResult
51
97
  end
52
98
 
99
+ #Deletes a custom field from a list
100
+ #
101
+ #*Return*:
102
+ #
103
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
104
+ #containing a successful message.
105
+ #
106
+ #*Error*: An Exception containing the cause of the error will be raised.
53
107
  def delete_custom_field(key)
54
108
  response = @soap.deleteListCustomField(:apiKey => CAMPAIGN_MONITOR_API_KEY, :listID => @listID, :key => '['+key+']')
55
109
  handle_request response.list_DeleteCustomFieldResult
56
110
  end
57
111
 
112
+ #Gets all the Custom Fields available for a list
113
+ #
114
+ #*Return*:
115
+ #
116
+ #*Success*: Upon a successful call, this method will return a collection of Campaigning::ListCustomField complex types. The individual ListCustomField
117
+ #record consists of a +fieldName+, +key+, +dataType+ and a +fieldOptions+ containing a list of possible options for multi-valued custom fields.
118
+ #
119
+ #*Error*: An Exception containing the cause of the error will be raised.
58
120
  def custom_fields
59
121
  response = @soap.getListCustomFields(:apiKey => CAMPAIGN_MONITOR_API_KEY, :listID => @listID)
60
122
  handle_request response.list_GetCustomFieldsResult
61
123
  end
62
124
 
125
+ #Gets a list's configuration detail
126
+ #
127
+ #*Return*:
128
+ #
129
+ #*Success*: A successful call to this method will return a Campaigning::ListDetail object, consisting of +listID+, +title+, +unsubscribePage+, +confirmOptIn+, and
130
+ #+confirmationSuccessPage+ (all as described in Campaigning::List#update and Campaigning::List.create).
131
+ #
132
+ #*Error*: An Exception containing the cause of the error will be raised.
63
133
  def details
64
134
  response = @soap.getListDetail(:apiKey => CAMPAIGN_MONITOR_API_KEY, :listID => @listID)
65
135
  handle_request response.list_GetDetailResult
66
136
  end
137
+
138
+ #Gets a list of all active subscribers for a list.
139
+ #
140
+ #*Return*:
141
+ #
142
+ #*Success*: Upon a successful call, this method will return a collection of Campaigning::Subscriber objects.
143
+ #
144
+ #*Error*: An Exception containing the cause of the error will be raised.
145
+ def get_all_active_subscribers
146
+ find_active_subscribers(DateTime.new(y=1911,m=1,d=01, h=01,min=00,s=00))
147
+ end
148
+
149
+ #Gets a list of all active subscribers for a list that have been joined since the specified date.
150
+ #The +joined_at+ param has to be a DateTime object, like:
151
+ #
152
+ # list.find_active_subscribers(DateTime.new(y=2009,m=4,d=01, h=01,min=00,s=00))
153
+ #
154
+ #*Return*:
155
+ #
156
+ #*Success*: Upon a successful call, this method will return a collection of Campaigning::Subscriber objects.
157
+ #
158
+ #*Error*: An Exception containing the cause of the error will be raised.
159
+ def find_active_subscribers(joined_at)
160
+ response = @soap.getSubscribers(
161
+ :apiKey => CAMPAIGN_MONITOR_API_KEY,
162
+ :listID => @listID,
163
+ :date =>joined_at.strftime('%Y-%m-%d %H:%M:%S')
164
+ )
165
+ handle_request response.subscribers_GetActiveResult
166
+ end
167
+
168
+ #Gets a list of all subscribers for a list that have unsubscribed since the specified date.
169
+ #The +unjoined_at+ param has to be a DateTime object, like:
170
+ #
171
+ # list.find_unsubscribed(DateTime.new(y=2009,m=4,d=01, h=01,min=00,s=00))
172
+ #
173
+ #*Return*:
174
+ #
175
+ #*Success*: Upon a successful call, this method will return a collection of Campaigning::Subscriber objects. In this case
176
+ #every returned object will contain the value "Unsubscribed" in the +state+ field.
177
+ #
178
+ #*Error*: An Exception containing the cause of the error will be raised.
179
+ def find_unsubscribed(unjoined_at)
180
+ response = @soap.getUnsubscribed(
181
+ :apiKey => CAMPAIGN_MONITOR_API_KEY,
182
+ :listID => @listID,
183
+ :date => unjoined_at.strftime('%Y-%m-%d %H:%M:%S') # TODO: Move that to a helper method
184
+ )
185
+ handle_request response.subscribers_GetUnsubscribedResult
186
+ end
67
187
 
68
-
188
+ #This method returns all of a particular subscribers details, including email address, name, active/inactive
189
+ #status and all custom field data. If a subscriber with that email address does not exist in that list, a +nil+ value is returned.
190
+ #
191
+ #*Return*:
192
+ #*Success*: Upon a successful call, this method will return a collection of Campaigning::Subscriber objects. In this case
193
+ #every returned object will contain the value "Unsubscribed" in the +state+ field.
194
+ #
195
+ #*Error*: An Exception containing the cause of the error will be raised.
196
+ def find_single_subscriber(email_address) # TODO: Create a mehod to handle with custom fields returned like (names from "State Name" to "state_name")
197
+ response = @soap.getSingleSubscriber(
198
+ :apiKey => CAMPAIGN_MONITOR_API_KEY,
199
+ :listID => @listID,
200
+ :emailAddress => email_address
201
+ )
202
+ handle_request response.subscribers_GetSingleSubscriberResult
203
+ end
204
+
205
+ #Update a subscriber list’s details
206
+ #
207
+ #Available _params_ argument are:
208
+ # * :title - The list title, as it will be shown in the application and through the API.
209
+ # * :unsubscribe_page - The URL to which subscribers will be directed when unsubscribing from the list.
210
+ # If left blank or omitted a generic unsubscribe page is used.
211
+ # * :comfirm_opt_in - Either true or false depending on whether the list requires email confirmation or not. Please see
212
+ # the help documentation for more details of what this means.
213
+ # * :confirmation_success_page - Successful email confirmations will be redirected to this URL. Ignored if ConfirmOptIn
214
+ # is false. If left blank or omitted a generic confirmation page is used.
215
+ #
216
+ #*Return*:
217
+ #
218
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
219
+ #containing a successful message.
220
+ #
221
+ #*Error*: An Exception containing the cause of the error will be raised.
69
222
  def update(params)
70
223
  response = @soap.updateList(
71
224
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
@@ -21,6 +21,21 @@ class Subscriber
21
21
  @soap = Campaigning::SOAPDriver.instance.get_driver
22
22
  end
23
23
 
24
+ #Adds a subscriber (email address, name) to an existing subscriber list. If the subscriber (email address) already exists,
25
+ #the name value is updated with whatever is passed in.
26
+ #
27
+ #If the list has been set as double opt-in, they will be sent the verification email, otherwise they will be sent the
28
+ #confirmation email you have set up for the list being subscribed to.
29
+ #
30
+ #<b>Please note</b>: If the subscriber is in an inactive state or has previously been unsubscribed, they will *not* be re-added
31
+ #to the active list. Therefore, this method should be used with caution and only where suitable.
32
+ #
33
+ #*Return*:
34
+ #
35
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
36
+ #containing a successful message.
37
+ #
38
+ #*Error*: An Exception containing the cause of the error will be raised.
24
39
  def add(list_id)
25
40
  response = @soap.addSubscriber(
26
41
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
@@ -31,6 +46,21 @@ class Subscriber
31
46
  handle_request response.subscriber_AddResult
32
47
  end
33
48
 
49
+ #Adds a subscriber (email address, name) to an existing subscriber list. If the subscriber (email address) already exists,
50
+ #the name value is updated with whatever is passed in.
51
+ #
52
+ #If the list has been set as double opt-in, they will be sent the verification email, otherwise they will be sent the
53
+ #confirmation email you have set up for the list being subscribed to.
54
+ #
55
+ #<b>Please note</b>: If the subscriber is in an inactive state or has previously been unsubscribed, they will be re-added to
56
+ #the active list. Therefore, this method should be used with caution and only where suitable.
57
+ #
58
+ #*Return*:
59
+ #
60
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
61
+ #containing a successful message.
62
+ #
63
+ #*Error*: An Exception containing the cause of the error will be raised.
34
64
  def add_and_resubscribe(list_id)
35
65
  response = @soap.addAndResubscribe(
36
66
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
@@ -41,6 +71,22 @@ class Subscriber
41
71
  handle_request response.subscriber_AddAndResubscribeResult
42
72
  end
43
73
 
74
+
75
+ #Adds a subscriber to a subscriber list, including adding custom field data for the subscriber. If the subscriber (email address)
76
+ #already exists, then the custom fields are updated with whatever is passed in.
77
+ #
78
+ #If the list has been set as double opt-in, they will be sent the verification email, otherwise they will be sent the confirmation
79
+ #email you have set up for the list being subscribed to.
80
+ #
81
+ #<b>Please note</b>: If the subscriber is in an inactive state or has previously been unsubscribed, they will be re-added to the
82
+ #active list. Therefore, this method should be used with caution and only where suitable.
83
+ #
84
+ #*Return*:
85
+ #
86
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
87
+ #containing a successful message.
88
+ #
89
+ #*Error*: An Exception containing the cause of the error will be raised.
44
90
  def add_and_resubscribe_with_custom_fields(list_id, custom_fields)
45
91
  response = @soap.addAndResubscribeWithCustomFields(
46
92
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
@@ -52,6 +98,21 @@ class Subscriber
52
98
  handle_request response.subscriber_AddAndResubscribeWithCustomFieldsResult
53
99
  end
54
100
 
101
+ #Adds a subscriber to a subscriber list, including adding custom field data for the subscriber. If the subscriber (email address)
102
+ #already exists, then the custom fields are updated with whatever is passed in.
103
+ #
104
+ #If the list has been set as double opt-in, they will be sent the verification email, otherwise they will be sent the confirmation
105
+ #email you have set up for the list being subscribed to.
106
+ #
107
+ #<b>Please note</b>: If the subscriber is in an inactive state or has previously been unsubscribed, they will *not* be re-added to
108
+ #the active list. Therefore, this method should be used with caution and only where suitable.
109
+ #
110
+ #*Return*:
111
+ #
112
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
113
+ #containing a successful message.
114
+ #
115
+ #*Error*: An Exception containing the cause of the error will be raised.
55
116
  def add_with_custom_fields(list_id, custom_fields)
56
117
  response = @soap.addSubscriberWithCustomFields(
57
118
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
@@ -63,10 +124,24 @@ class Subscriber
63
124
  handle_request response.subscriber_AddWithCustomFieldsResult
64
125
  end
65
126
 
127
+ #Changes the status of an Active Subscriber to an Unsubscribed Subscriber who will no longer receive
128
+ #campaigns sent to that Subscriber List.
129
+ #
130
+ #If the list is set to add unsubscribing subscribers to the suppression list, then the subscriber’s email address will
131
+ #also be added to the suppression list.
132
+ #
133
+ #*Return*:
134
+ #
135
+ #*Success*: Upon a successful call, this method will return a Campaigning::Result object wich consists of a +code+ and +message+ fields
136
+ #containing a successful message.
137
+ #
138
+ #*Error*: An Exception containing the cause of the error will be raised.
66
139
  def unsubscribe(list_id)
67
140
  Subscriber.unsubscribe(@emailAddress, list_id)
68
141
  end
69
142
 
143
+ #Changes the status of an Active Subscriber to an Unsubscribed Subscriber who will no longer receive
144
+ #campaigns sent to that Subscriber List (Same that the instance method with the same name).
70
145
  def self.unsubscribe(email, list_id)
71
146
  response = Campaigning::SOAPDriver.instance.get_driver.unsubscribe(
72
147
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
@@ -76,30 +151,12 @@ class Subscriber
76
151
  Helpers.handle_request response.subscriber_UnsubscribeResult
77
152
  end
78
153
 
79
- # TODO: May I move this method to List type?
80
- def self.active_subscribers(list_id, datetime)
81
- response = Campaigning::SOAPDriver.instance.get_driver.getSubscribers(
82
- :apiKey => CAMPAIGN_MONITOR_API_KEY,
83
- :listID => list_id,
84
- :date => datetime.strftime('%Y-%m-%d %H:%M:%S') # TODO: Move that to a helper method
85
- )
86
- Helpers.handle_request response.subscribers_GetActiveResult
87
- end
88
-
89
- # TODO: May I move this method to List type?
90
- def self.get_unsubscribed(list_id, datetime)
91
- response = Campaigning::SOAPDriver.instance.get_driver.getUnsubscribed(
92
- :apiKey => CAMPAIGN_MONITOR_API_KEY,
93
- :listID => list_id,
94
- :date => datetime.strftime('%Y-%m-%d %H:%M:%S') # TODO: Move that to a helper method
95
- )
96
- Helpers.handle_request response.subscribers_GetUnsubscribedResult
97
- end
98
-
154
+ #Returns True or False as to the existence of the given email address in the list supplied.
99
155
  def is_subscribed?(list_id)
100
156
  Subscriber.is_subscribed?(@emailAddress, list_id)
101
157
  end
102
158
 
159
+ #Returns True or False as to the existence of the given email address in the list supplied.
103
160
  def self.is_subscribed?(email, list_id)
104
161
  response = Campaigning::SOAPDriver.instance.get_driver.getIsSubscribed(
105
162
  :apiKey => CAMPAIGN_MONITOR_API_KEY,
@@ -109,16 +166,7 @@ class Subscriber
109
166
  response = Helpers.handle_request response.subscribers_GetIsSubscribedResult
110
167
  response == 'True' ? true : false
111
168
  end
112
-
113
- # TODO: Create a mehod to handle with custom fields returned like (names from "State Name" to "state_name")
114
- def self.get_single_subscriber(list_id, email_address)
115
- response = Campaigning::SOAPDriver.instance.get_driver.getSingleSubscriber(
116
- :apiKey => CAMPAIGN_MONITOR_API_KEY,
117
- :listID => list_id,
118
- :emailAddress => email_address
119
- )
120
- Helpers.handle_request response.subscribers_GetSingleSubscriberResult
121
- end
169
+
122
170
 
123
171
 
124
172
  protected
@@ -1,18 +1,31 @@
1
1
  require 'test_helper'
2
2
 
3
3
  # Replace this API key with your own (http://www.campaignmonitor.com/api/)
4
- CAMPAIGN_MONITOR_API_KEY = '__PUT__YOUR__API__KEY__HERE__'
4
+ CAMPAIGN_MONITOR_API_KEY = '54cae7f3aa1f35cb3bb5bc41756d8b7f'
5
5
  CLIENT_ID = 'd7acfd4cd2ffffc2d86b8903d18a1276'
6
6
  CLIENT_TWO_ID = '730acd1e8d27d56bdb87e88685613d72'
7
7
 
8
8
  class CampaigningTest < Test::Unit::TestCase
9
9
 
10
- def setup
11
- @cm = Campaigning::Base.new
12
- end
13
10
 
14
- # def test_clients
15
- # clients = @cm.clients
11
+ # def test_campaigning_system_date
12
+ # date = Campaigning.system_date
13
+ # assert !date.nil?
14
+ # puts date
15
+ # end
16
+ #
17
+ # def test_user_get_time_zones
18
+ # time_zones = Campaigning.time_zones
19
+ # assert !time_zones.nil?
20
+ # end
21
+
22
+ # def test_user_countries
23
+ # countries = Campaigning.countries
24
+ # assert !countries.nil?
25
+ # end
26
+
27
+ # def test_client_get_all_clients
28
+ # clients = Campaigning::Client.get_all_clients
16
29
  # assert clients.length > 0
17
30
  # clients.each{ |c| puts c.clientID + " - " + c.name }
18
31
  # end
@@ -22,8 +35,8 @@ class CampaigningTest < Test::Unit::TestCase
22
35
  # client = Campaigning::Client.new(CLIENT_ID)
23
36
  # assert client.lists.length > 0
24
37
  # end
25
- #
26
- #
38
+
39
+
27
40
  # def test_client_create
28
41
  # client_created = Campaigning::Client.create(
29
42
  # :company_name => "Orange Company 15",
@@ -45,36 +58,57 @@ class CampaigningTest < Test::Unit::TestCase
45
58
  # client = Campaigning::Client.find_by_name("Orange Company 7")
46
59
  # client.delete
47
60
  # end
48
- #
61
+
49
62
  # def test_client_segments
50
63
  # client = Campaigning::Client.find_by_name("Client One Company")
51
64
  # assert client.segments.length > 0
52
65
  # puts client.segments.inspect
53
66
  # end
54
- #
55
- #
56
- def test_find_client_by_name
57
- client = Campaigning::Client.find_by_name("Client One Company")
58
- puts client.inspect
59
- # assert client != nil && client.name == "Client One Company"
60
- end
61
- #
62
- #
67
+
68
+
69
+ # def test_find_client_by_name
70
+ # client = Campaigning::Client.find_by_name("Client One Company")
71
+ # puts client.inspect
72
+ # # assert client != nil && client.name == "Client One Company"
73
+ # end
74
+
75
+
63
76
  # def test_get_client_campaigns
64
77
  # client = Campaigning::Client.find_by_name("Client One Company")
65
78
  # puts client.campaigns.inspect
66
79
  # end
67
80
 
68
- # def test_get_client_details
69
- # client = Campaigning::Client.find_by_name("Client Two ")
70
- # puts client.details.inspect
71
- # end
72
- #
81
+ def test_get_client_details
82
+ client = Campaigning::Client.find_by_name("Client One Company")
83
+ # client_details = client.details
84
+ # basic_details = client_details.basicDetails
85
+ # access_and_billing_details = client_details.accessAndBilling
86
+ # puts "Basic details:"
87
+ # puts "Client ID: #{basic_details.clientID} - \n
88
+ # Company: #{basic_details.companyName} - \n
89
+ # Contact: #{basic_details.contactName} - \n
90
+ # Country: #{basic_details.country} - \n
91
+ # Timezone: #{basic_details.timezone}"
92
+ #
93
+ # puts "Access and Billing Details:"
94
+ # puts "Username: #{access_and_billing_details.username} - \n
95
+ # Password: #{access_and_billing_details.password} - \n
96
+ # Billing Type: #{access_and_billing_details.billingType} - \n
97
+ # Currency: #{access_and_billing_details.currency} - \n
98
+ # Delivery Fee: #{access_and_billing_details.deliveryFee} - \n
99
+ # Cost per Recipient: #{access_and_billing_details.costPerRecipient} - \n
100
+ # Design and Span test Fee: #{access_and_billing_details.designAndSpamTestFee} - \n
101
+ # Access Level: #{access_and_billing_details.accessLevel}"
102
+
103
+ puts client.details.inspect != nil
104
+
105
+ end
106
+
73
107
  # def test_get_client_suppression_list
74
- # client = Campaigning::Client.find_by_name("Client Two ")
75
- # puts client.suppression_list
108
+ # client = Campaigning::Client.find_by_name("Client One Company")
109
+ # puts client.suppression_list.inspect
76
110
  # end
77
- #
111
+
78
112
  # def test_client_update_access_and_billing
79
113
  # client = Campaigning::Client.find_by_name("Client One Company")
80
114
  # response = client.update_access_and_billing(
@@ -110,20 +144,6 @@ class CampaigningTest < Test::Unit::TestCase
110
144
  # end
111
145
 
112
146
 
113
- #
114
- # def test_user_get_time_zones
115
- # time_zones = @cm.time_zones
116
- # assert !time_zones.nil?
117
- # end
118
- #
119
- #
120
- # def test_system_date
121
- # sys_date = @cm.system_date
122
- # assert !sys_date.nil?
123
- # puts sys_date
124
- # end
125
- #
126
- #
127
147
  # def test_campaign_create
128
148
  # client = Campaigning::Client.find_by_name("Client One Company")
129
149
  # response = Campaigning::Campaign.create(
@@ -149,7 +169,7 @@ class CampaigningTest < Test::Unit::TestCase
149
169
  #
150
170
  # def test_campaign_lists
151
171
  # client = Campaigning::Client.find_by_name("Client One Company")
152
- # puts client.campaigns[2].lists.inspect
172
+ # client.campaigns[0].lists
153
173
  # end
154
174
  #
155
175
  # def test_campaign_opens
@@ -164,9 +184,15 @@ class CampaigningTest < Test::Unit::TestCase
164
184
  # end
165
185
  #
166
186
  #
167
- # def test_campaign_subscriber_clicks
187
+ # def test_campaign_summary
168
188
  # client = Campaigning::Client.find_by_name("Client One Company")
169
- # puts client.campaigns[0].subscriber_clicks
189
+ # # client.campaigns[2].subscriber_clicks.each do |subscriber|
190
+ # # puts "Subscriber: #{subscriber.emailAddress}"
191
+ # # subscriber.clickedLinks.each { |clicked| puts "Link: #{clicked.link} - Number of clicks: #{clicked.clicks}"}
192
+ # # end
193
+ # assert client.campaigns[2].subscriber_clicks != nil
194
+ # assert client.campaigns[2].subscriber_clicks != []
195
+ #
170
196
  # end
171
197
  #
172
198
  #
@@ -233,11 +259,6 @@ class CampaigningTest < Test::Unit::TestCase
233
259
  # assert response.code == 0
234
260
  # end
235
261
  #
236
- # def test_subscriber_actives
237
- # subscriber_list = Campaigning::Subscriber.active_subscribers("ac52b645c048888a44c87b5f1ecf6b7d", DateTime.new(y=2009,m=5,d=01, h=01,min=00,s=00))
238
- # puts subscriber_list.inspect
239
- # assert subscriber_list.length > 0
240
- # end
241
262
  #
242
263
  # def test_subscriber_is_subscribed
243
264
  # subscriber = Campaigning::Subscriber.new("user_to_test@test.com") # TODO: Change to get the Subscriber, not to CREATE a new one
@@ -246,19 +267,40 @@ class CampaigningTest < Test::Unit::TestCase
246
267
  # assert response == false
247
268
  # end
248
269
  #
249
- # def test_subscriber_get_single_subscriber
250
- # subscriber = Campaigning::Subscriber.get_single_subscriber("ac52b645c048888a44c87b5f1ecf6b7d", "user_custon2@test.com")
270
+ #
271
+ # def test_list_find_single_subscriber
272
+ # client = Campaigning::Client.find_by_name("Client One Company")
273
+ # list = client.find_list_by_name "My Friends"
274
+ # subscriber = list.find_single_subscriber("user_custon2@test.com")
251
275
  # puts subscriber.inspect
252
276
  # assert subscriber.name != nil
253
- # end
277
+ # end
254
278
  #
255
- # def test_subscriber_get_unsubscribed
256
- # subscriber_list = Campaigning::Subscriber.get_unsubscribed("ac52b645c048888a44c87b5f1ecf6b7d", DateTime.new(y=2009,m=4,d=01, h=01,min=00,s=00))
279
+ # def test_list_find_unsubscribed
280
+ # client = Campaigning::Client.find_by_name("Client One Company")
281
+ # list = client.find_list_by_name "My Friends"
282
+ # subscriber_list = list.find_unsubscribed(DateTime.new(y=2009,m=4,d=01, h=01,min=00,s=00))
257
283
  # puts subscriber_list.inspect
258
284
  # assert subscriber_list.length > 0
259
285
  # end
260
286
  #
261
- #
287
+ # def test_list_find_active_subscribers
288
+ # client = Campaigning::Client.find_by_name("Client One Company")
289
+ # list = client.find_list_by_name "My Friends"
290
+ # subscriber_list = list.find_active_subscribers(DateTime.new(y=2009,m=5,d=01, h=01,min=00,s=00))
291
+ # assert subscriber_list.length > 0
292
+ # end
293
+
294
+ # def test_list_get_all_active_subscribers
295
+ # client = Campaigning::Client.find_by_name("Client One Company")
296
+ # list = client.find_list_by_name "My Friends"
297
+ # subscriber_list = list.get_all_active_subscribers
298
+ # puts subscriber_list.inspect
299
+ # assert subscriber_list.length > 0
300
+ # end
301
+
302
+
303
+
262
304
  # def test_list_create
263
305
  # client = Campaigning::Client.find_by_name("Client One Company")
264
306
  # list = Campaigning::List.create(
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gnumarcelo-campaigning
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcelo Menezes
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-07 00:00:00 -07:00
12
+ date: 2009-05-22 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency