createsend 2.3.0 → 2.4.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/Gemfile.lock +5 -5
- data/HISTORY.md +83 -0
- data/createsend.gemspec +2 -2
- data/lib/createsend/campaign.rb +51 -0
- data/lib/createsend/client.rb +8 -0
- data/lib/createsend/list.rb +40 -2
- data/lib/createsend/version.rb +1 -1
- data/test/campaign_test.rb +48 -3
- data/test/client_test.rb +11 -0
- data/test/fixtures/active_subscribers.json +10 -5
- data/test/fixtures/bounced_subscribers.json +2 -1
- data/test/fixtures/campaign_spam.json +16 -0
- data/test/fixtures/campaign_summary.json +2 -1
- data/test/fixtures/custom_fields.json +6 -3
- data/test/fixtures/deleted_subscribers.json +10 -5
- data/test/fixtures/email_client_usage.json +38 -0
- data/test/fixtures/subscriber_details.json +2 -1
- data/test/fixtures/unconfirmed_subscribers.json +37 -0
- data/test/fixtures/unsubscribed_subscribers.json +10 -5
- data/test/fixtures/update_custom_field.json +1 -0
- data/test/list_test.rb +52 -1
- data/test/subscriber_test.rb +1 -0
- metadata +31 -25
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
createsend (2.
|
4
|
+
createsend (2.4.0)
|
5
5
|
hashie (~> 1.0)
|
6
6
|
httparty (~> 0.8)
|
7
7
|
json
|
@@ -15,17 +15,17 @@ GEM
|
|
15
15
|
cane (2.0.0)
|
16
16
|
fakeweb (1.3.0)
|
17
17
|
hashie (1.2.0)
|
18
|
-
httparty (0.
|
19
|
-
multi_json
|
18
|
+
httparty (0.9.0)
|
19
|
+
multi_json (~> 1.0)
|
20
20
|
multi_xml
|
21
21
|
i18n (0.6.1)
|
22
22
|
jnunemaker-matchy (0.4.0)
|
23
|
-
json (1.7.
|
23
|
+
json (1.7.5)
|
24
24
|
metaclass (0.0.1)
|
25
25
|
mocha (0.10.0)
|
26
26
|
metaclass (~> 0.0.1)
|
27
27
|
multi_json (1.0.3)
|
28
|
-
multi_xml (0.4.
|
28
|
+
multi_xml (0.4.4)
|
29
29
|
rake (0.9.2.2)
|
30
30
|
shoulda (3.3.0)
|
31
31
|
shoulda-context (~> 1.0)
|
data/HISTORY.md
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
# createsend-ruby history
|
2
|
+
|
3
|
+
## v2.4.0 - 5 Nov, 2012 (4277d8d9)
|
4
|
+
|
5
|
+
* Added CreateSend::Campaign#email_client_usage.
|
6
|
+
* Added support for ReadsEmailWith field on subscriber objects.
|
7
|
+
* Added support for retrieving unconfirmed subscribers for a list.
|
8
|
+
* Added support for suppressing email addresses.
|
9
|
+
* Added support for retrieving spam complaints for a campaign, as well as
|
10
|
+
adding SpamComplaints field to campaign summary output.
|
11
|
+
* Added VisibleInPreferenceCenter field to custom field output.
|
12
|
+
* Added support for setting preference center visibility when creating custom
|
13
|
+
fields.
|
14
|
+
* Added the ability to update a custom field name and preference visibility.
|
15
|
+
* Added documentation explaining that text_url may now be nil or an empty
|
16
|
+
string when creating a campaign.
|
17
|
+
|
18
|
+
## v2.3.0 - 10 Oct, 2012 (6639c1f6)
|
19
|
+
|
20
|
+
* Added support for creating campaigns from templates.
|
21
|
+
* Added support for unsuppressing an email address.
|
22
|
+
* Improved documentation and tests for getting active subscribers. Clearly
|
23
|
+
documented the data structure for multi option multi select fields.
|
24
|
+
|
25
|
+
## v2.2.0 - 17 Sep, 2012 (17409634)
|
26
|
+
|
27
|
+
* Added WorldviewURL field to campaign summary response.
|
28
|
+
* Added Latitude, Longitude, City, Region, CountryCode, and CountryName fields
|
29
|
+
to campaign opens and clicks response.
|
30
|
+
|
31
|
+
## v2.1.0 - 30 Aug, 2012 (ee936259)
|
32
|
+
|
33
|
+
* Added support for basic / unlimited pricing.
|
34
|
+
|
35
|
+
## v2.0.0 - 22 Aug, 2012 (8a5ab6b4)
|
36
|
+
|
37
|
+
* Added support for UnsubscribeSetting field when creating, updating and
|
38
|
+
getting list details.
|
39
|
+
* Added support for including AddUnsubscribesToSuppList and
|
40
|
+
ScrubActiveWithSuppList fields when updating a list.
|
41
|
+
* Added support for getting all client lists to which a subscriber with a
|
42
|
+
specific email address belongs.
|
43
|
+
* Removed deprecated warnings and disallowed calls to be made in a deprecated
|
44
|
+
manner.
|
45
|
+
|
46
|
+
## v1.1.1 - 24 Jul, 2012 (72934e66)
|
47
|
+
|
48
|
+
* Added support for specifying whether subscription-based autoresponders
|
49
|
+
should be restarted when adding or updating subscribers.
|
50
|
+
|
51
|
+
## v1.1.0 - 11 Jul, 2012 (93e856b6)
|
52
|
+
|
53
|
+
* Added support for newly released team management functionality.
|
54
|
+
|
55
|
+
## v1.0.4 - 4 May, 2012 (9bce25c1)
|
56
|
+
|
57
|
+
* Added Travis CI support.
|
58
|
+
* Added Gemnasium support.
|
59
|
+
* Fixes to usage of Shoulda and Hashie libraries.
|
60
|
+
|
61
|
+
## v1.0.3 - 3 Dec, 2011 (1ed2b56a)
|
62
|
+
|
63
|
+
* Fixes to support Ruby 1.9.* (both the library as well as the rake tasks).
|
64
|
+
* Fixed the User-Agent header so that it now uses the correct module VERSION.
|
65
|
+
|
66
|
+
## v1.0.2 - 31 Oct, 2011 (83020409)
|
67
|
+
|
68
|
+
* Added support for deleting a subscriber.
|
69
|
+
* Added support for specifying a 'clear' field when updating or importing
|
70
|
+
subscribers.
|
71
|
+
* Added support for queuing subscription-based autoresponders when importing
|
72
|
+
subscribers.
|
73
|
+
* Added support for retrieving deleted subscribers.
|
74
|
+
* Added support for including more social sharing stats in campaign summary.
|
75
|
+
* Added support for unscheduling a campaign.
|
76
|
+
|
77
|
+
## v1.0.1 - 25 Oct, 2011 (347b2b95)
|
78
|
+
|
79
|
+
* Remove CreateSendOptions and remove usage of yaml config file.
|
80
|
+
|
81
|
+
## v1.0.0 - 26 Sep, 2011 (0a078b09)
|
82
|
+
|
83
|
+
* Initial release which supports current Campaign Monitor API.
|
data/createsend.gemspec
CHANGED
@@ -15,13 +15,13 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.add_runtime_dependency('httparty', '~> 0.8')
|
16
16
|
s.name = "createsend"
|
17
17
|
s.author = "James Dennes"
|
18
|
-
s.description = %q{Implements the complete functionality of the
|
18
|
+
s.description = %q{Implements the complete functionality of the Campaign Monitor API.}
|
19
19
|
s.email = ["jdennes@gmail.com"]
|
20
20
|
s.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
|
21
21
|
s.files = `git ls-files`.split("\n")
|
22
22
|
s.homepage = "http://campaignmonitor.github.com/createsend-ruby/"
|
23
23
|
s.require_paths = ["lib"]
|
24
|
-
s.summary = %q{A library which implements the complete functionality of
|
24
|
+
s.summary = %q{A library which implements the complete functionality of the Campaign Monitor API.}
|
25
25
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
26
26
|
s.version = CreateSend::VERSION
|
27
27
|
s.platform = Gem::Platform::RUBY
|
data/lib/createsend/campaign.rb
CHANGED
@@ -11,6 +11,21 @@ module CreateSend
|
|
11
11
|
end
|
12
12
|
|
13
13
|
# Creates a new campaign for a client.
|
14
|
+
# client_id - String representing the ID of the client for whom the
|
15
|
+
# campaign will be created.
|
16
|
+
# subject - String representing the subject of the campaign.
|
17
|
+
# name - String representing the name of the campaign.
|
18
|
+
# from_name - String representing the from name for the campaign.
|
19
|
+
# from_email - String representing the from address for the campaign.
|
20
|
+
# reply_to - String representing the reply-to address for the campaign.
|
21
|
+
# html_url - String representing the URL for the campaign HTML content.
|
22
|
+
# text_url - String representing the URL for the campaign text content.
|
23
|
+
# Note that text_url is optional and if nil or an empty string, text
|
24
|
+
# content will be automatically generated from the HTML content.
|
25
|
+
# list_ids - Array of Strings representing the IDs of the lists to
|
26
|
+
# which the campaign will be sent.
|
27
|
+
# segment_ids - Array of Strings representing the IDs of the segments to
|
28
|
+
# which the campaign will be sent.
|
14
29
|
def self.create(client_id, subject, name, from_name, from_email,
|
15
30
|
reply_to, html_url, text_url, list_ids, segment_ids)
|
16
31
|
options = { :body => {
|
@@ -28,6 +43,23 @@ module CreateSend
|
|
28
43
|
end
|
29
44
|
|
30
45
|
# Creates a new campaign for a client, from a template.
|
46
|
+
# client_id - String representing the ID of the client for whom the
|
47
|
+
# campaign will be created.
|
48
|
+
# subject - String representing the subject of the campaign.
|
49
|
+
# name - String representing the name of the campaign.
|
50
|
+
# from_name - String representing the from name for the campaign.
|
51
|
+
# from_email - String representing the from address for the campaign.
|
52
|
+
# reply_to - String representing the reply-to address for the campaign.
|
53
|
+
# list_ids - Array of Strings representing the IDs of the lists to
|
54
|
+
# which the campaign will be sent.
|
55
|
+
# segment_ids - Array of Strings representing the IDs of the segments to
|
56
|
+
# which the campaign will be sent.
|
57
|
+
# template_id - String representing the ID of the template on which
|
58
|
+
# the campaign will be based.
|
59
|
+
# template_content - Hash representing the content to be used for the
|
60
|
+
# editable areas of the template. See documentation at
|
61
|
+
# campaignmonitor.com/api/campaigns/#creating_a_campaign_from_template
|
62
|
+
# for full details of template content format.
|
31
63
|
def self.create_from_template(client_id, subject, name, from_name,
|
32
64
|
from_email, reply_to, list_ids, segment_ids, template_id,
|
33
65
|
template_content)
|
@@ -80,6 +112,12 @@ module CreateSend
|
|
80
112
|
Hashie::Mash.new(response)
|
81
113
|
end
|
82
114
|
|
115
|
+
# Gets the email clients that subscribers used to open the campaign
|
116
|
+
def email_client_usage
|
117
|
+
response = get "emailclientusage", {}
|
118
|
+
response.map{|item| Hashie::Mash.new(item)}
|
119
|
+
end
|
120
|
+
|
83
121
|
# Retrieves the lists and segments to which this campaaign will
|
84
122
|
# be (or was) sent.
|
85
123
|
def lists_and_segments
|
@@ -138,6 +176,19 @@ module CreateSend
|
|
138
176
|
Hashie::Mash.new(response)
|
139
177
|
end
|
140
178
|
|
179
|
+
# Retrieves the spam complaints for this campaign.
|
180
|
+
def spam(date, page=1, page_size=1000, order_field="date",
|
181
|
+
order_direction="asc")
|
182
|
+
options = { :query => {
|
183
|
+
:date => date,
|
184
|
+
:page => page,
|
185
|
+
:pagesize => page_size,
|
186
|
+
:orderfield => order_field,
|
187
|
+
:orderdirection => order_direction } }
|
188
|
+
response = get "spam", options
|
189
|
+
Hashie::Mash.new(response)
|
190
|
+
end
|
191
|
+
|
141
192
|
# Retrieves the bounces for this campaign.
|
142
193
|
def bounces(date="1900-01-01", page=1, page_size=1000, order_field="date",
|
143
194
|
order_direction="asc")
|
data/lib/createsend/client.rb
CHANGED
@@ -93,6 +93,14 @@ module CreateSend
|
|
93
93
|
Hashie::Mash.new(response)
|
94
94
|
end
|
95
95
|
|
96
|
+
# Adds email addresses to a client's suppression list
|
97
|
+
def suppress(emails)
|
98
|
+
options = { :body => {
|
99
|
+
:EmailAddresses => emails.kind_of?(String) ?
|
100
|
+
[ emails ] : emails }.to_json }
|
101
|
+
response = post "suppress", options
|
102
|
+
end
|
103
|
+
|
96
104
|
# Unsuppresses an email address by removing it from the the client's
|
97
105
|
# suppression list
|
98
106
|
def unsuppress(email)
|
data/lib/createsend/list.rb
CHANGED
@@ -41,15 +41,40 @@ module CreateSend
|
|
41
41
|
end
|
42
42
|
|
43
43
|
# Creates a new custom field for this list.
|
44
|
-
|
44
|
+
# field_name - String representing the name to be given to the field
|
45
|
+
# data_type - String representing the data type of the field. Valid data
|
46
|
+
# types are 'Text', 'Number', 'MultiSelectOne', 'MultiSelectMany',
|
47
|
+
# 'Date', 'Country', and 'USState'.
|
48
|
+
# options - Array of Strings representing the options for the field if it
|
49
|
+
# is of type 'MultiSelectOne' or 'MultiSelectMany'.
|
50
|
+
# visible_in_preference_center - Boolean indicating whether or not the
|
51
|
+
# field should be visible in the subscriber preference center
|
52
|
+
def create_custom_field(field_name, data_type, options=[],
|
53
|
+
visible_in_preference_center=true)
|
45
54
|
options = { :body => {
|
46
55
|
:FieldName => field_name,
|
47
56
|
:DataType => data_type,
|
48
|
-
:Options => options
|
57
|
+
:Options => options,
|
58
|
+
:VisibleInPreferenceCenter => visible_in_preference_center }.to_json }
|
49
59
|
response = post "customfields", options
|
50
60
|
response.parsed_response
|
51
61
|
end
|
52
62
|
|
63
|
+
# Updates a custom field belonging to this list.
|
64
|
+
# custom_field_key - String which represents the key for the custom field
|
65
|
+
# field_name - String representing the name to be given to the field
|
66
|
+
# visible_in_preference_center - Boolean indicating whether or not the
|
67
|
+
# field should be visible in the subscriber preference center
|
68
|
+
def update_custom_field(custom_field_key, field_name,
|
69
|
+
visible_in_preference_center)
|
70
|
+
custom_field_key = CGI.escape(custom_field_key)
|
71
|
+
options = { :body => {
|
72
|
+
:FieldName => field_name,
|
73
|
+
:VisibleInPreferenceCenter => visible_in_preference_center }.to_json }
|
74
|
+
response = put "customfields/#{custom_field_key}", options
|
75
|
+
response.parsed_response
|
76
|
+
end
|
77
|
+
|
53
78
|
# Deletes a custom field associated with this list.
|
54
79
|
def delete_custom_field(custom_field_key)
|
55
80
|
custom_field_key = CGI.escape(custom_field_key)
|
@@ -104,6 +129,19 @@ module CreateSend
|
|
104
129
|
Hashie::Mash.new(response)
|
105
130
|
end
|
106
131
|
|
132
|
+
# Gets the unconfirmed subscribers for this list.
|
133
|
+
def unconfirmed(date, page=1, page_size=1000, order_field="email",
|
134
|
+
order_direction="asc")
|
135
|
+
options = { :query => {
|
136
|
+
:date => date,
|
137
|
+
:page => page,
|
138
|
+
:pagesize => page_size,
|
139
|
+
:orderfield => order_field,
|
140
|
+
:orderdirection => order_direction } }
|
141
|
+
response = get "unconfirmed", options
|
142
|
+
Hashie::Mash.new(response)
|
143
|
+
end
|
144
|
+
|
107
145
|
# Gets the bounced subscribers for this list.
|
108
146
|
def bounced(date, page=1, page_size=1000, order_field="email",
|
109
147
|
order_direction="asc")
|
data/lib/createsend/version.rb
CHANGED
data/test/campaign_test.rb
CHANGED
@@ -14,6 +14,19 @@ class CampaignTest < Test::Unit::TestCase
|
|
14
14
|
campaign_id = CreateSend::Campaign.create client_id, "subject", "name", "g'day", "good.day@example.com", "good.day@example.com",
|
15
15
|
"http://example.com/campaign.html", "http://example.com/campaign.txt", [ '7y12989e82ue98u2e', 'dh9w89q8w98wudwd989' ],
|
16
16
|
[ 'y78q9w8d9w8ud9q8uw', 'djw98quw9duqw98uwd98' ]
|
17
|
+
request = FakeWeb.last_request.body
|
18
|
+
request.include?("\"TextUrl\":\"http://example.com/campaign.txt\"").should == true
|
19
|
+
campaign_id.should == "787y87y87y87y87y87y87"
|
20
|
+
end
|
21
|
+
|
22
|
+
should "create a campaign with a nil text_url param" do
|
23
|
+
client_id = '87y8d7qyw8d7yq8w7ydwqwd'
|
24
|
+
stub_post(@api_key, "campaigns/#{client_id}.json", "create_campaign.json")
|
25
|
+
campaign_id = CreateSend::Campaign.create client_id, "subject", "name", "g'day", "good.day@example.com", "good.day@example.com",
|
26
|
+
"http://example.com/campaign.html", nil, [ '7y12989e82ue98u2e', 'dh9w89q8w98wudwd989' ],
|
27
|
+
[ 'y78q9w8d9w8ud9q8uw', 'djw98quw9duqw98uwd98' ]
|
28
|
+
request = FakeWeb.last_request.body
|
29
|
+
request.include?("\"TextUrl\":null").should == true
|
17
30
|
campaign_id.should == "787y87y87y87y87y87y87"
|
18
31
|
end
|
19
32
|
|
@@ -22,7 +35,6 @@ class CampaignTest < Test::Unit::TestCase
|
|
22
35
|
:Singlelines => [
|
23
36
|
{
|
24
37
|
:Content => "This is a heading",
|
25
|
-
:Alt => "This is alt text",
|
26
38
|
:Href => "http://example.com/"
|
27
39
|
}
|
28
40
|
],
|
@@ -99,7 +111,12 @@ class CampaignTest < Test::Unit::TestCase
|
|
99
111
|
campaign_id.should == "787y87y87y87y87y87y87"
|
100
112
|
end
|
101
113
|
|
102
|
-
should "send a preview of a draft campaign" do
|
114
|
+
should "send a preview of a draft campaign to a single recipient" do
|
115
|
+
stub_post(@api_key, "campaigns/#{@campaign.campaign_id}/sendpreview.json", nil)
|
116
|
+
@campaign.send_preview "test+89898u9@example.com", "random"
|
117
|
+
end
|
118
|
+
|
119
|
+
should "send a preview of a draft campaign to multiple recipients" do
|
103
120
|
stub_post(@api_key, "campaigns/#{@campaign.campaign_id}/sendpreview.json", nil)
|
104
121
|
@campaign.send_preview [ "test+89898u9@example.com", "test+787y8y7y8@example.com" ], "random"
|
105
122
|
end
|
@@ -133,8 +150,19 @@ class CampaignTest < Test::Unit::TestCase
|
|
133
150
|
summary.Likes.should == 32
|
134
151
|
summary.WebVersionURL.should == "http://createsend.com/t/r-3A433FC72FFE3B8B"
|
135
152
|
summary.WorldviewURL.should == "http://client.createsend.com/reports/wv/r/3A433FC72FFE3B8B"
|
153
|
+
summary.SpamComplaints.should == 23
|
136
154
|
end
|
137
|
-
|
155
|
+
|
156
|
+
should "get the email client usage for a campaign" do
|
157
|
+
stub_get(@api_key, "campaigns/#{@campaign.campaign_id}/emailclientusage.json", "email_client_usage.json")
|
158
|
+
ecu = @campaign.email_client_usage
|
159
|
+
ecu.size.should == 6
|
160
|
+
ecu.first.Client.should == "iOS Devices"
|
161
|
+
ecu.first.Version.should == "iPhone"
|
162
|
+
ecu.first.Percentage.should == 19.83
|
163
|
+
ecu.first.Subscribers.should == 7056
|
164
|
+
end
|
165
|
+
|
138
166
|
should "get the lists and segments for a campaign" do
|
139
167
|
stub_get(@api_key, "campaigns/#{@campaign.campaign_id}/listsandsegments.json", "campaign_listsandsegments.json")
|
140
168
|
ls = @campaign.lists_and_segments
|
@@ -229,6 +257,23 @@ class CampaignTest < Test::Unit::TestCase
|
|
229
257
|
unsubscribes.NumberOfPages.should == 1
|
230
258
|
end
|
231
259
|
|
260
|
+
should "get the spam complaints for a campaign" do
|
261
|
+
min_date = "2010-01-01"
|
262
|
+
stub_get(@api_key, "campaigns/#{@campaign.campaign_id}/spam.json?page=1&pagesize=1000&orderfield=date&orderdirection=asc&date=#{CGI.escape(min_date)}", "campaign_spam.json")
|
263
|
+
spam = @campaign.spam min_date
|
264
|
+
spam.Results.size.should == 1
|
265
|
+
spam.Results.first.EmailAddress.should == "subs+6576576576@example.com"
|
266
|
+
spam.Results.first.ListID.should == "512a3bc577a58fdf689c654329b50fa0"
|
267
|
+
spam.Results.first.Date.should == "2010-10-11 08:29:00"
|
268
|
+
spam.ResultsOrderedBy.should == "date"
|
269
|
+
spam.OrderDirection.should == "asc"
|
270
|
+
spam.PageNumber.should == 1
|
271
|
+
spam.PageSize.should == 1000
|
272
|
+
spam.RecordsOnThisPage.should == 1
|
273
|
+
spam.TotalNumberOfRecords.should == 1
|
274
|
+
spam.NumberOfPages.should == 1
|
275
|
+
end
|
276
|
+
|
232
277
|
should "get the bounces for a campaign" do
|
233
278
|
min_date = "2010-01-01"
|
234
279
|
stub_get(@api_key, "campaigns/#{@campaign.campaign_id}/bounces.json?page=1&pagesize=1000&orderfield=date&orderdirection=asc&date=#{CGI.escape(min_date)}", "campaign_bounces.json")
|
data/test/client_test.rb
CHANGED
@@ -107,6 +107,17 @@ class ClientTest < Test::Unit::TestCase
|
|
107
107
|
res.Results.first.State.should == "Suppressed"
|
108
108
|
end
|
109
109
|
|
110
|
+
should "suppress a single email address" do
|
111
|
+
email = "example@example.com"
|
112
|
+
stub_post(@api_key, "clients/#{@client.client_id}/suppress.json", nil)
|
113
|
+
result = @client.suppress email
|
114
|
+
end
|
115
|
+
|
116
|
+
should "suppress multiple email address" do
|
117
|
+
stub_post(@api_key, "clients/#{@client.client_id}/suppress.json", nil)
|
118
|
+
result = @client.suppress [ "one@example.com", "two@example.com" ]
|
119
|
+
end
|
120
|
+
|
110
121
|
should "unsuppress an email address" do
|
111
122
|
email = "example@example.com"
|
112
123
|
stub_put(@api_key, "clients/#{@client.client_id}/unsuppress.json?email=#{CGI.escape(email)}", nil)
|
@@ -26,7 +26,8 @@
|
|
26
26
|
"Key": "subscription date",
|
27
27
|
"Value": "2010-03-09"
|
28
28
|
}
|
29
|
-
]
|
29
|
+
],
|
30
|
+
"ReadsEmailWith": "Gmail"
|
30
31
|
},
|
31
32
|
{
|
32
33
|
"EmailAddress": "subs+7878787y8ggg@example.com",
|
@@ -38,7 +39,8 @@
|
|
38
39
|
"Key": "website",
|
39
40
|
"Value": "http://subdomain.example.com"
|
40
41
|
}
|
41
|
-
]
|
42
|
+
],
|
43
|
+
"ReadsEmailWith": "Gmail"
|
42
44
|
},
|
43
45
|
{
|
44
46
|
"EmailAddress": "subs+7890909i0ggg@example.com",
|
@@ -50,21 +52,24 @@
|
|
50
52
|
"Key": "website",
|
51
53
|
"Value": "http://subdomain.example.com"
|
52
54
|
}
|
53
|
-
]
|
55
|
+
],
|
56
|
+
"ReadsEmailWith": ""
|
54
57
|
},
|
55
58
|
{
|
56
59
|
"EmailAddress": "subs@example.com",
|
57
60
|
"Name": "Person Four",
|
58
61
|
"Date": "2010-10-27 13:13:00",
|
59
62
|
"State": "Active",
|
60
|
-
"CustomFields": []
|
63
|
+
"CustomFields": [],
|
64
|
+
"ReadsEmailWith": ""
|
61
65
|
},
|
62
66
|
{
|
63
67
|
"EmailAddress": "joey@example.com",
|
64
68
|
"Name": "Person Five",
|
65
69
|
"Date": "2010-10-27 13:13:00",
|
66
70
|
"State": "Active",
|
67
|
-
"CustomFields": []
|
71
|
+
"CustomFields": [],
|
72
|
+
"ReadsEmailWith": "Gmail"
|
68
73
|
}
|
69
74
|
],
|
70
75
|
"ResultsOrderedBy": "email",
|
@@ -0,0 +1,16 @@
|
|
1
|
+
{
|
2
|
+
"Results": [
|
3
|
+
{
|
4
|
+
"EmailAddress": "subs+6576576576@example.com",
|
5
|
+
"ListID": "512a3bc577a58fdf689c654329b50fa0",
|
6
|
+
"Date": "2010-10-11 08:29:00"
|
7
|
+
}
|
8
|
+
],
|
9
|
+
"ResultsOrderedBy": "date",
|
10
|
+
"OrderDirection": "asc",
|
11
|
+
"PageNumber": 1,
|
12
|
+
"PageSize": 1000,
|
13
|
+
"RecordsOnThisPage": 1,
|
14
|
+
"TotalNumberOfRecords": 1,
|
15
|
+
"NumberOfPages": 1
|
16
|
+
}
|
@@ -9,5 +9,6 @@
|
|
9
9
|
"Forwards": 11,
|
10
10
|
"Likes": 32,
|
11
11
|
"WebVersionURL": "http://createsend.com/t/r-3A433FC72FFE3B8B",
|
12
|
-
"WorldviewURL": "http://client.createsend.com/reports/wv/r/3A433FC72FFE3B8B"
|
12
|
+
"WorldviewURL": "http://client.createsend.com/reports/wv/r/3A433FC72FFE3B8B",
|
13
|
+
"SpamComplaints": 23
|
13
14
|
}
|
@@ -3,18 +3,21 @@
|
|
3
3
|
"FieldName": "website",
|
4
4
|
"Key": "[website]",
|
5
5
|
"DataType": "Text",
|
6
|
-
"FieldOptions": []
|
6
|
+
"FieldOptions": [],
|
7
|
+
"VisibleInPreferenceCenter": true
|
7
8
|
},
|
8
9
|
{
|
9
10
|
"FieldName": "age",
|
10
11
|
"Key": "[age]",
|
11
12
|
"DataType": "Number",
|
12
|
-
"FieldOptions": []
|
13
|
+
"FieldOptions": [],
|
14
|
+
"VisibleInPreferenceCenter": true
|
13
15
|
},
|
14
16
|
{
|
15
17
|
"FieldName": "subscription date",
|
16
18
|
"Key": "[subscriptiondate]",
|
17
19
|
"DataType": "Date",
|
18
|
-
"FieldOptions": []
|
20
|
+
"FieldOptions": [],
|
21
|
+
"VisibleInPreferenceCenter": false
|
19
22
|
}
|
20
23
|
]
|
@@ -5,7 +5,8 @@
|
|
5
5
|
"Name": "Deleted One",
|
6
6
|
"Date": "2010-10-25 13:11:00",
|
7
7
|
"State": "Deleted",
|
8
|
-
"CustomFields": []
|
8
|
+
"CustomFields": [],
|
9
|
+
"ReadsEmailWith": "Gmail"
|
9
10
|
},
|
10
11
|
{
|
11
12
|
"EmailAddress": "subscriberone@example.com",
|
@@ -17,28 +18,32 @@
|
|
17
18
|
"Key": "website",
|
18
19
|
"Value": "http://google.com"
|
19
20
|
}
|
20
|
-
]
|
21
|
+
],
|
22
|
+
"ReadsEmailWith": "Gmail"
|
21
23
|
},
|
22
24
|
{
|
23
25
|
"EmailAddress": "example+1@example.com",
|
24
26
|
"Name": "Example One",
|
25
27
|
"Date": "2010-10-26 10:56:00",
|
26
28
|
"State": "Deleted",
|
27
|
-
"CustomFields": []
|
29
|
+
"CustomFields": [],
|
30
|
+
"ReadsEmailWith": ""
|
28
31
|
},
|
29
32
|
{
|
30
33
|
"EmailAddress": "example+2@example.com",
|
31
34
|
"Name": "Example Two",
|
32
35
|
"Date": "2010-10-26 10:56:00",
|
33
36
|
"State": "Deleted",
|
34
|
-
"CustomFields": []
|
37
|
+
"CustomFields": [],
|
38
|
+
"ReadsEmailWith": ""
|
35
39
|
},
|
36
40
|
{
|
37
41
|
"EmailAddress": "example+3@example.com",
|
38
42
|
"Name": "Example Three",
|
39
43
|
"Date": "2010-10-26 10:56:00",
|
40
44
|
"State": "Deleted",
|
41
|
-
"CustomFields": []
|
45
|
+
"CustomFields": [],
|
46
|
+
"ReadsEmailWith": "Gmail"
|
42
47
|
}
|
43
48
|
],
|
44
49
|
"ResultsOrderedBy": "email",
|
@@ -0,0 +1,38 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"Client": "iOS Devices",
|
4
|
+
"Version": "iPhone",
|
5
|
+
"Percentage": 19.83,
|
6
|
+
"Subscribers": 7056
|
7
|
+
},
|
8
|
+
{
|
9
|
+
"Client": "Apple Mail",
|
10
|
+
"Version": "Apple Mail 6",
|
11
|
+
"Percentage": 13.02,
|
12
|
+
"Subscribers": 4633
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"Client": "Apple Mail",
|
16
|
+
"Version": "Apple Mail 5",
|
17
|
+
"Percentage": 10.60,
|
18
|
+
"Subscribers": 3773
|
19
|
+
},
|
20
|
+
{
|
21
|
+
"Client": "Microsoft Outlook",
|
22
|
+
"Version": "Outlook 2010",
|
23
|
+
"Percentage": 7.18,
|
24
|
+
"Subscribers": 2556
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"Client": "iOS Devices",
|
28
|
+
"Version": "iPad",
|
29
|
+
"Percentage": 4.43,
|
30
|
+
"Subscribers": 1577
|
31
|
+
},
|
32
|
+
{
|
33
|
+
"Client": "Undetectable",
|
34
|
+
"Version": "Undetectable",
|
35
|
+
"Percentage": 4.94,
|
36
|
+
"Subscribers": 1632
|
37
|
+
}
|
38
|
+
]
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"Results": [
|
3
|
+
{
|
4
|
+
"EmailAddress": "subs+7t8787Y@example.com",
|
5
|
+
"Name": "Unconfirmed One",
|
6
|
+
"Date": "2010-10-25 10:28:00",
|
7
|
+
"State": "Unconfirmed",
|
8
|
+
"CustomFields": [
|
9
|
+
{
|
10
|
+
"Key": "website",
|
11
|
+
"Value": "http://example.com"
|
12
|
+
}
|
13
|
+
],
|
14
|
+
"ReadsEmailWith": ""
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"EmailAddress": "subs+7878787y8ggg@example.com",
|
18
|
+
"Name": "Unconfirmed Two",
|
19
|
+
"Date": "2010-10-25 12:17:00",
|
20
|
+
"State": "Unconfirmed",
|
21
|
+
"CustomFields": [
|
22
|
+
{
|
23
|
+
"Key": "website",
|
24
|
+
"Value": "http://subdomain.example.com"
|
25
|
+
}
|
26
|
+
],
|
27
|
+
"ReadsEmailWith": ""
|
28
|
+
}
|
29
|
+
],
|
30
|
+
"ResultsOrderedBy": "email",
|
31
|
+
"OrderDirection": "asc",
|
32
|
+
"PageNumber": 1,
|
33
|
+
"PageSize": 1000,
|
34
|
+
"RecordsOnThisPage": 2,
|
35
|
+
"TotalNumberOfRecords": 2,
|
36
|
+
"NumberOfPages": 1
|
37
|
+
}
|
@@ -5,7 +5,8 @@
|
|
5
5
|
"Name": "Unsub One",
|
6
6
|
"Date": "2010-10-25 13:11:00",
|
7
7
|
"State": "Unsubscribed",
|
8
|
-
"CustomFields": []
|
8
|
+
"CustomFields": [],
|
9
|
+
"ReadsEmailWith": "Gmail"
|
9
10
|
},
|
10
11
|
{
|
11
12
|
"EmailAddress": "subscriberone@example.com",
|
@@ -17,28 +18,32 @@
|
|
17
18
|
"Key": "website",
|
18
19
|
"Value": "http://google.com"
|
19
20
|
}
|
20
|
-
]
|
21
|
+
],
|
22
|
+
"ReadsEmailWith": "Gmail"
|
21
23
|
},
|
22
24
|
{
|
23
25
|
"EmailAddress": "example+1@example.com",
|
24
26
|
"Name": "Example One",
|
25
27
|
"Date": "2010-10-26 10:56:00",
|
26
28
|
"State": "Unsubscribed",
|
27
|
-
"CustomFields": []
|
29
|
+
"CustomFields": [],
|
30
|
+
"ReadsEmailWith": ""
|
28
31
|
},
|
29
32
|
{
|
30
33
|
"EmailAddress": "example+2@example.com",
|
31
34
|
"Name": "Example Two",
|
32
35
|
"Date": "2010-10-26 10:56:00",
|
33
36
|
"State": "Unsubscribed",
|
34
|
-
"CustomFields": []
|
37
|
+
"CustomFields": [],
|
38
|
+
"ReadsEmailWith": ""
|
35
39
|
},
|
36
40
|
{
|
37
41
|
"EmailAddress": "example+3@example.com",
|
38
42
|
"Name": "Example Three",
|
39
43
|
"Date": "2010-10-26 10:56:00",
|
40
44
|
"State": "Unsubscribed",
|
41
|
-
"CustomFields": []
|
45
|
+
"CustomFields": [],
|
46
|
+
"ReadsEmailWith": "Gmail"
|
42
47
|
}
|
43
48
|
],
|
44
49
|
"ResultsOrderedBy": "email",
|
@@ -0,0 +1 @@
|
|
1
|
+
"[myrenamedcustomfield]"
|
data/test/list_test.rb
CHANGED
@@ -45,9 +45,37 @@ class ListTest < Test::Unit::TestCase
|
|
45
45
|
should "create a custom field" do
|
46
46
|
stub_post(@api_key, "lists/#{@list.list_id}/customfields.json", "create_custom_field.json")
|
47
47
|
personalisation_tag = @list.create_custom_field "new date field", "Date"
|
48
|
+
request = FakeWeb.last_request.body
|
49
|
+
request.include?("\"FieldName\":\"new date field\"").should == true
|
50
|
+
request.include?("\"DataType\":\"Date\"").should == true
|
51
|
+
request.include?("\"Options\":[]").should == true
|
52
|
+
request.include?("\"VisibleInPreferenceCenter\":true").should == true
|
48
53
|
personalisation_tag.should == "[newdatefield]"
|
49
54
|
end
|
50
55
|
|
56
|
+
should "create a custom field with options and visible_in_preference_center" do
|
57
|
+
stub_post(@api_key, "lists/#{@list.list_id}/customfields.json", "create_custom_field.json")
|
58
|
+
options = ["one", "two"]
|
59
|
+
personalisation_tag = @list.create_custom_field("newsletter format",
|
60
|
+
"MultiSelectOne", options, false)
|
61
|
+
request = FakeWeb.last_request.body
|
62
|
+
request.include?("\"FieldName\":\"newsletter format\"").should == true
|
63
|
+
request.include?("\"DataType\":\"MultiSelectOne\"").should == true
|
64
|
+
request.include?("\"Options\":[\"one\",\"two\"]").should == true
|
65
|
+
request.include?("\"VisibleInPreferenceCenter\":false").should == true
|
66
|
+
personalisation_tag.should == "[newdatefield]"
|
67
|
+
end
|
68
|
+
|
69
|
+
should "update a custom field" do
|
70
|
+
key = "[mycustomfield]"
|
71
|
+
stub_put(@api_key, "lists/#{@list.list_id}/customfields/#{CGI.escape(key)}.json", "update_custom_field.json")
|
72
|
+
personalisation_tag = @list.update_custom_field key, "my renamed custom field", true
|
73
|
+
request = FakeWeb.last_request.body
|
74
|
+
request.include?("\"FieldName\":\"my renamed custom field\"").should == true
|
75
|
+
request.include?("\"VisibleInPreferenceCenter\":true").should == true
|
76
|
+
personalisation_tag.should == "[myrenamedcustomfield]"
|
77
|
+
end
|
78
|
+
|
51
79
|
should "delete a custom field" do
|
52
80
|
custom_field_key = "[newdatefield]"
|
53
81
|
stub_delete(@api_key, "lists/#{@list.list_id}/customfields/#{CGI.escape(custom_field_key)}.json", nil)
|
@@ -80,6 +108,7 @@ class ListTest < Test::Unit::TestCase
|
|
80
108
|
cfs.first.Key.should == "[website]"
|
81
109
|
cfs.first.DataType.should == "Text"
|
82
110
|
cfs.first.FieldOptions.should == []
|
111
|
+
cfs.first.VisibleInPreferenceCenter.should == true
|
83
112
|
end
|
84
113
|
|
85
114
|
should "get the segments for a list" do
|
@@ -124,8 +153,27 @@ class ListTest < Test::Unit::TestCase
|
|
124
153
|
res.Results.first.CustomFields[1].Value.should == "option one"
|
125
154
|
res.Results.first.CustomFields[2].Key.should == "multi select field"
|
126
155
|
res.Results.first.CustomFields[2].Value.should == "option two"
|
156
|
+
res.Results.first.ReadsEmailWith.should == "Gmail"
|
127
157
|
end
|
128
|
-
|
158
|
+
|
159
|
+
should "get the unconfirmed subscribers for a list" do
|
160
|
+
min_date = "2010-01-01"
|
161
|
+
stub_get(@api_key, "lists/#{@list.list_id}/unconfirmed.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{CGI.escape(min_date)}",
|
162
|
+
"unconfirmed_subscribers.json")
|
163
|
+
res = @list.unconfirmed min_date
|
164
|
+
res.ResultsOrderedBy.should == "email"
|
165
|
+
res.OrderDirection.should == "asc"
|
166
|
+
res.PageNumber.should == 1
|
167
|
+
res.PageSize.should == 1000
|
168
|
+
res.RecordsOnThisPage.should == 2
|
169
|
+
res.TotalNumberOfRecords.should == 2
|
170
|
+
res.NumberOfPages.should == 1
|
171
|
+
res.Results.size.should == 2
|
172
|
+
res.Results.first.EmailAddress.should == "subs+7t8787Y@example.com"
|
173
|
+
res.Results.first.Name.should =="Unconfirmed One"
|
174
|
+
res.Results.first.State.should == "Unconfirmed"
|
175
|
+
end
|
176
|
+
|
129
177
|
should "get the unsubscribed subscribers for a list" do
|
130
178
|
min_date = "2010-01-01"
|
131
179
|
stub_get(@api_key, "lists/#{@list.list_id}/unsubscribed.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{CGI.escape(min_date)}",
|
@@ -144,6 +192,7 @@ class ListTest < Test::Unit::TestCase
|
|
144
192
|
res.Results.first.Date.should == "2010-10-25 13:11:00"
|
145
193
|
res.Results.first.State.should == "Unsubscribed"
|
146
194
|
res.Results.first.CustomFields.size.should == 0
|
195
|
+
res.Results.first.ReadsEmailWith.should == "Gmail"
|
147
196
|
end
|
148
197
|
|
149
198
|
should "get the deleted subscribers for a list" do
|
@@ -164,6 +213,7 @@ class ListTest < Test::Unit::TestCase
|
|
164
213
|
res.Results.first.Date.should == "2010-10-25 13:11:00"
|
165
214
|
res.Results.first.State.should == "Deleted"
|
166
215
|
res.Results.first.CustomFields.size.should == 0
|
216
|
+
res.Results.first.ReadsEmailWith.should == "Gmail"
|
167
217
|
end
|
168
218
|
|
169
219
|
should "get the bounced subscribers for a list" do
|
@@ -184,6 +234,7 @@ class ListTest < Test::Unit::TestCase
|
|
184
234
|
res.Results.first.Date.should == "2010-10-25 13:11:00"
|
185
235
|
res.Results.first.State.should == "Bounced"
|
186
236
|
res.Results.first.CustomFields.size.should == 0
|
237
|
+
res.Results.first.ReadsEmailWith.should == ""
|
187
238
|
end
|
188
239
|
|
189
240
|
should "get the webhooks for a list" do
|
data/test/subscriber_test.rb
CHANGED
@@ -20,6 +20,7 @@ class SubscriberTest < Test::Unit::TestCase
|
|
20
20
|
subscriber.CustomFields.size.should == 3
|
21
21
|
subscriber.CustomFields.first.Key.should == 'website'
|
22
22
|
subscriber.CustomFields.first.Value.should == 'http://example.com'
|
23
|
+
subscriber.ReadsEmailWith.should == "Gmail"
|
23
24
|
end
|
24
25
|
|
25
26
|
should "add a subscriber without custom fields" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: createsend
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70098807897300 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70098807897300
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: fakeweb
|
27
|
-
requirement: &
|
27
|
+
requirement: &70098807896180 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.3'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70098807896180
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: jnunemaker-matchy
|
38
|
-
requirement: &
|
38
|
+
requirement: &70098807915080 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0.4'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70098807915080
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: mocha
|
49
|
-
requirement: &
|
49
|
+
requirement: &70098807914240 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0.9'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70098807914240
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: shoulda
|
60
|
-
requirement: &
|
60
|
+
requirement: &70098807913600 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 3.3.0
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70098807913600
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: cane
|
71
|
-
requirement: &
|
71
|
+
requirement: &70098807912660 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70098807912660
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: json
|
82
|
-
requirement: &
|
82
|
+
requirement: &70098807911800 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70098807911800
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: hashie
|
93
|
-
requirement: &
|
93
|
+
requirement: &70098807911160 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '1.0'
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70098807911160
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: httparty
|
104
|
-
requirement: &
|
104
|
+
requirement: &70098807910060 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,8 +109,8 @@ dependencies:
|
|
109
109
|
version: '0.8'
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
113
|
-
description: Implements the complete functionality of the
|
112
|
+
version_requirements: *70098807910060
|
113
|
+
description: Implements the complete functionality of the Campaign Monitor API.
|
114
114
|
email:
|
115
115
|
- jdennes@gmail.com
|
116
116
|
executables: []
|
@@ -121,6 +121,7 @@ files:
|
|
121
121
|
- .travis.yml
|
122
122
|
- Gemfile
|
123
123
|
- Gemfile.lock
|
124
|
+
- HISTORY.md
|
124
125
|
- LICENSE
|
125
126
|
- README.md
|
126
127
|
- Rakefile
|
@@ -154,6 +155,7 @@ files:
|
|
154
155
|
- test/fixtures/campaign_listsandsegments.json
|
155
156
|
- test/fixtures/campaign_opens.json
|
156
157
|
- test/fixtures/campaign_recipients.json
|
158
|
+
- test/fixtures/campaign_spam.json
|
157
159
|
- test/fixtures/campaign_summary.json
|
158
160
|
- test/fixtures/campaign_unsubscribes.json
|
159
161
|
- test/fixtures/campaigns.json
|
@@ -173,6 +175,7 @@ files:
|
|
173
175
|
- test/fixtures/custom_fields.json
|
174
176
|
- test/fixtures/deleted_subscribers.json
|
175
177
|
- test/fixtures/drafts.json
|
178
|
+
- test/fixtures/email_client_usage.json
|
176
179
|
- test/fixtures/import_subscribers.json
|
177
180
|
- test/fixtures/import_subscribers_partial_success.json
|
178
181
|
- test/fixtures/list_details.json
|
@@ -193,7 +196,9 @@ files:
|
|
193
196
|
- test/fixtures/template_details.json
|
194
197
|
- test/fixtures/templates.json
|
195
198
|
- test/fixtures/timezones.json
|
199
|
+
- test/fixtures/unconfirmed_subscribers.json
|
196
200
|
- test/fixtures/unsubscribed_subscribers.json
|
201
|
+
- test/fixtures/update_custom_field.json
|
197
202
|
- test/helper.rb
|
198
203
|
- test/list_test.rb
|
199
204
|
- test/person_test.rb
|
@@ -212,9 +217,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
212
217
|
- - ! '>='
|
213
218
|
- !ruby/object:Gem::Version
|
214
219
|
version: '0'
|
215
|
-
segments:
|
216
|
-
- 0
|
217
|
-
hash: 3175201096736061315
|
218
220
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
219
221
|
none: false
|
220
222
|
requirements:
|
@@ -226,7 +228,7 @@ rubyforge_project:
|
|
226
228
|
rubygems_version: 1.8.15
|
227
229
|
signing_key:
|
228
230
|
specification_version: 3
|
229
|
-
summary: A library which implements the complete functionality of
|
231
|
+
summary: A library which implements the complete functionality of the Campaign Monitor
|
230
232
|
API.
|
231
233
|
test_files:
|
232
234
|
- test/administrator_test.rb
|
@@ -248,6 +250,7 @@ test_files:
|
|
248
250
|
- test/fixtures/campaign_listsandsegments.json
|
249
251
|
- test/fixtures/campaign_opens.json
|
250
252
|
- test/fixtures/campaign_recipients.json
|
253
|
+
- test/fixtures/campaign_spam.json
|
251
254
|
- test/fixtures/campaign_summary.json
|
252
255
|
- test/fixtures/campaign_unsubscribes.json
|
253
256
|
- test/fixtures/campaigns.json
|
@@ -267,6 +270,7 @@ test_files:
|
|
267
270
|
- test/fixtures/custom_fields.json
|
268
271
|
- test/fixtures/deleted_subscribers.json
|
269
272
|
- test/fixtures/drafts.json
|
273
|
+
- test/fixtures/email_client_usage.json
|
270
274
|
- test/fixtures/import_subscribers.json
|
271
275
|
- test/fixtures/import_subscribers_partial_success.json
|
272
276
|
- test/fixtures/list_details.json
|
@@ -287,7 +291,9 @@ test_files:
|
|
287
291
|
- test/fixtures/template_details.json
|
288
292
|
- test/fixtures/templates.json
|
289
293
|
- test/fixtures/timezones.json
|
294
|
+
- test/fixtures/unconfirmed_subscribers.json
|
290
295
|
- test/fixtures/unsubscribed_subscribers.json
|
296
|
+
- test/fixtures/update_custom_field.json
|
291
297
|
- test/helper.rb
|
292
298
|
- test/list_test.rb
|
293
299
|
- test/person_test.rb
|