createsend 1.0.1 → 1.0.2

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.md CHANGED
@@ -4,7 +4,7 @@ A ruby library which implements the complete functionality of v3 of the CreateSe
4
4
 
5
5
  ## Installation
6
6
 
7
- sudo gem install createsend
7
+ gem install createsend
8
8
 
9
9
  ## Examples
10
10
 
@@ -43,6 +43,12 @@ module CreateSend
43
43
  response = post "send", options
44
44
  end
45
45
 
46
+ # Unschedules this campaign if it is currently scheduled.
47
+ def unschedule
48
+ options = { :body => "" }
49
+ response = post "unschedule", options
50
+ end
51
+
46
52
  # Deletes this campaign.
47
53
  def delete
48
54
  response = CreateSend.delete "/campaigns/#{campaign_id}.json", {}
@@ -111,6 +111,18 @@ module CreateSend
111
111
  Hashie::Mash.new(response)
112
112
  end
113
113
 
114
+ # Gets the deleted subscribers for this list.
115
+ def deleted(date, page=1, page_size=1000, order_field="email", order_direction="asc")
116
+ options = { :query => {
117
+ :date => date,
118
+ :page => page,
119
+ :pagesize => page_size,
120
+ :orderfield => order_field,
121
+ :orderdirection => order_direction } }
122
+ response = get "deleted", options
123
+ Hashie::Mash.new(response)
124
+ end
125
+
114
126
  # Updates this list.
115
127
  def update(title, unsubscribe_page, confirmed_opt_in, confirmation_success_page)
116
128
  options = { :body => {
@@ -31,10 +31,11 @@ module CreateSend
31
31
  end
32
32
 
33
33
  # Imports subscribers into a subscriber list.
34
- def self.import(list_id, subscribers, resubscribe)
34
+ def self.import(list_id, subscribers, resubscribe, queue_subscription_based_autoresponders=false)
35
35
  options = { :body => {
36
36
  :Subscribers => subscribers,
37
- :Resubscribe => resubscribe }.to_json }
37
+ :Resubscribe => resubscribe,
38
+ :QueueSubscriptionBasedAutoresponders => queue_subscription_based_autoresponders }.to_json }
38
39
  begin
39
40
  response = CreateSend.post "/subscribers/#{list_id}/import.json", options
40
41
  rescue BadRequest => br
@@ -80,5 +81,10 @@ module CreateSend
80
81
  response.map{|item| Hashie::Mash.new(item)}
81
82
  end
82
83
 
84
+ # Moves this subscriber to the Deleted state in the associated list.
85
+ def delete
86
+ options = { :query => { :email => @email_address } }
87
+ CreateSend.delete "/subscribers/#{@list_id}.json", options
88
+ end
83
89
  end
84
90
  end
@@ -1,3 +1,3 @@
1
1
  module CreateSend
2
- VERSION = "1.0.1" unless defined?(CreateSend::VERSION)
2
+ VERSION = "1.0.2" unless defined?(CreateSend::VERSION)
3
3
  end
@@ -26,6 +26,11 @@ class CampaignTest < Test::Unit::TestCase
26
26
  stub_post(@api_key, "campaigns/#{@campaign.campaign_id}/send.json", nil)
27
27
  @campaign.send "confirmation@example.com"
28
28
  end
29
+
30
+ should "unschedule a campaign" do
31
+ stub_post(@api_key, "campaigns/#{@campaign.campaign_id}/unschedule.json", nil)
32
+ @campaign.unschedule
33
+ end
29
34
 
30
35
  should "delete a campaign" do
31
36
  stub_delete(@api_key, "campaigns/#{@campaign.campaign_id}.json", nil)
@@ -41,6 +46,9 @@ class CampaignTest < Test::Unit::TestCase
41
46
  summary.Unsubscribed.should == 0
42
47
  summary.Bounced.should == 0
43
48
  summary.UniqueOpened.should == 5
49
+ summary.Mentions.should == 23
50
+ summary.Forwards.should == 11
51
+ summary.Likes.should == 32
44
52
  summary.WebVersionURL.should == "http://createsend.com/t/r-3A433FC72FFE3B8B"
45
53
  end
46
54
 
@@ -5,5 +5,8 @@
5
5
  "Unsubscribed": 0,
6
6
  "Bounced": 0,
7
7
  "UniqueOpened": 5,
8
+ "Mentions": 23,
9
+ "Forwards": 11,
10
+ "Likes": 32,
8
11
  "WebVersionURL": "http://createsend.com/t/r-3A433FC72FFE3B8B"
9
12
  }
@@ -0,0 +1,51 @@
1
+ {
2
+ "Results": [
3
+ {
4
+ "EmailAddress": "subscriber@example.com",
5
+ "Name": "Deleted One",
6
+ "Date": "2010-10-25 13:11:00",
7
+ "State": "Deleted",
8
+ "CustomFields": []
9
+ },
10
+ {
11
+ "EmailAddress": "subscriberone@example.com",
12
+ "Name": "Subscriber",
13
+ "Date": "2010-10-25 13:04:00",
14
+ "State": "Deleted",
15
+ "CustomFields": [
16
+ {
17
+ "Key": "website",
18
+ "Value": "http://google.com"
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ "EmailAddress": "example+1@example.com",
24
+ "Name": "Example One",
25
+ "Date": "2010-10-26 10:56:00",
26
+ "State": "Deleted",
27
+ "CustomFields": []
28
+ },
29
+ {
30
+ "EmailAddress": "example+2@example.com",
31
+ "Name": "Example Two",
32
+ "Date": "2010-10-26 10:56:00",
33
+ "State": "Deleted",
34
+ "CustomFields": []
35
+ },
36
+ {
37
+ "EmailAddress": "example+3@example.com",
38
+ "Name": "Example Three",
39
+ "Date": "2010-10-26 10:56:00",
40
+ "State": "Deleted",
41
+ "CustomFields": []
42
+ }
43
+ ],
44
+ "ResultsOrderedBy": "email",
45
+ "OrderDirection": "asc",
46
+ "PageNumber": 1,
47
+ "PageSize": 1000,
48
+ "RecordsOnThisPage": 5,
49
+ "TotalNumberOfRecords": 5,
50
+ "NumberOfPages": 1
51
+ }
data/test/list_test.rb CHANGED
@@ -123,6 +123,26 @@ class ListTest < Test::Unit::TestCase
123
123
  res.Results.first.CustomFields.size.should == 0
124
124
  end
125
125
 
126
+ should "get the deleted subscribers for a list" do
127
+ min_date = "2010-01-01"
128
+ stub_get(@api_key, "lists/#{@list.list_id}/deleted.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{CGI.escape(min_date)}",
129
+ "deleted_subscribers.json")
130
+ res = @list.deleted min_date
131
+ res.ResultsOrderedBy.should == "email"
132
+ res.OrderDirection.should == "asc"
133
+ res.PageNumber.should == 1
134
+ res.PageSize.should == 1000
135
+ res.RecordsOnThisPage.should == 5
136
+ res.TotalNumberOfRecords.should == 5
137
+ res.NumberOfPages.should == 1
138
+ res.Results.size.should == 5
139
+ res.Results.first.EmailAddress.should == "subscriber@example.com"
140
+ res.Results.first.Name.should == "Deleted One"
141
+ res.Results.first.Date.should == "2010-10-25 13:11:00"
142
+ res.Results.first.State.should == "Deleted"
143
+ res.Results.first.CustomFields.size.should == 0
144
+ end
145
+
126
146
  should "get the bounced subscribers for a list" do
127
147
  min_date = "2010-01-01"
128
148
  stub_get(@api_key, "lists/#{@list.list_id}/bounced.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{CGI.escape(min_date)}",
@@ -184,6 +204,5 @@ class ListTest < Test::Unit::TestCase
184
204
  stub_put(@api_key, "lists/#{@list.list_id}/webhooks/#{webhook_id}/deactivate.json", nil)
185
205
  @list.deactivate_webhook webhook_id
186
206
  end
187
-
188
207
  end
189
208
  end
@@ -52,6 +52,15 @@ class SubscriberTest < Test::Unit::TestCase
52
52
  @subscriber.update new_email, "Subscriber", custom_fields, true
53
53
  @subscriber.email_address.should == new_email
54
54
  end
55
+
56
+ should "update a subscriber with custom fields including the clear option" do
57
+ email = "subscriber@example.com"
58
+ new_email = "new_email_address@example.com"
59
+ stub_put(@api_key, "subscribers/#{@list_id}.json?email=#{CGI.escape(email)}", nil)
60
+ custom_fields = [ { :Key => 'website', :Value => '', :Clear => true } ]
61
+ @subscriber.update new_email, "Subscriber", custom_fields, true
62
+ @subscriber.email_address.should == new_email
63
+ end
55
64
 
56
65
  should "import many subscribers at once" do
57
66
  stub_post(@api_key, "subscribers/#{@list_id}/import.json", "import_subscribers.json")
@@ -68,6 +77,36 @@ class SubscriberTest < Test::Unit::TestCase
68
77
  import_result.DuplicateEmailsInSubmission.size.should == 0
69
78
  end
70
79
 
80
+ should "import many subscribers at once, and start subscription-based autoresponders" do
81
+ stub_post(@api_key, "subscribers/#{@list_id}/import.json", "import_subscribers.json")
82
+ subscribers = [
83
+ { :EmailAddress => "example+1@example.com", :Name => "Example One" },
84
+ { :EmailAddress => "example+2@example.com", :Name => "Example Two" },
85
+ { :EmailAddress => "example+3@example.com", :Name => "Example Three" },
86
+ ]
87
+ import_result = CreateSend::Subscriber.import @list_id, subscribers, true, true
88
+ import_result.FailureDetails.size.should == 0
89
+ import_result.TotalUniqueEmailsSubmitted.should == 3
90
+ import_result.TotalExistingSubscribers.should == 0
91
+ import_result.TotalNewSubscribers.should == 3
92
+ import_result.DuplicateEmailsInSubmission.size.should == 0
93
+ end
94
+
95
+ should "import many subscribers at once with custom fields, including the clear option" do
96
+ stub_post(@api_key, "subscribers/#{@list_id}/import.json", "import_subscribers.json")
97
+ subscribers = [
98
+ { :EmailAddress => "example+1@example.com", :Name => "Example One", :CustomFields => [ { :Key => 'website', :Value => '', :Clear => true } ] },
99
+ { :EmailAddress => "example+2@example.com", :Name => "Example Two", :CustomFields => [ { :Key => 'website', :Value => '', :Clear => false } ] },
100
+ { :EmailAddress => "example+3@example.com", :Name => "Example Three", :CustomFields => [ { :Key => 'website', :Value => '', :Clear => false } ] },
101
+ ]
102
+ import_result = CreateSend::Subscriber.import @list_id, subscribers, true
103
+ import_result.FailureDetails.size.should == 0
104
+ import_result.TotalUniqueEmailsSubmitted.should == 3
105
+ import_result.TotalExistingSubscribers.should == 0
106
+ import_result.TotalNewSubscribers.should == 3
107
+ import_result.DuplicateEmailsInSubmission.size.should == 0
108
+ end
109
+
71
110
  should "import many subscribers at once with partial success" do
72
111
  # Stub request with 400 Bad Request as the expected response status
73
112
  stub_post(@api_key, "subscribers/#{@list_id}/import.json", "import_subscribers_partial_success.json", 400)
@@ -106,5 +145,9 @@ class SubscriberTest < Test::Unit::TestCase
106
145
  history.first.Actions.first.Detail.should == ""
107
146
  end
108
147
 
148
+ should "delete a subscriber" do
149
+ stub_delete(@api_key, "subscribers/#{@subscriber.list_id}.json?email=#{CGI.escape(@subscriber.email_address)}", nil)
150
+ @subscriber.delete
151
+ end
109
152
  end
110
153
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: createsend
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 1
10
- version: 1.0.1
9
+ - 2
10
+ version: 1.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - James Dennes
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-10-25 00:00:00 +11:00
18
+ date: 2011-10-31 00:00:00 +11:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -174,6 +174,7 @@ files:
174
174
  - test/fixtures/create_template.json
175
175
  - test/fixtures/custom_api_error.json
176
176
  - test/fixtures/custom_fields.json
177
+ - test/fixtures/deleted_subscribers.json
177
178
  - test/fixtures/drafts.json
178
179
  - test/fixtures/import_subscribers.json
179
180
  - test/fixtures/import_subscribers_partial_success.json
@@ -262,6 +263,7 @@ test_files:
262
263
  - test/fixtures/create_template.json
263
264
  - test/fixtures/custom_api_error.json
264
265
  - test/fixtures/custom_fields.json
266
+ - test/fixtures/deleted_subscribers.json
265
267
  - test/fixtures/drafts.json
266
268
  - test/fixtures/import_subscribers.json
267
269
  - test/fixtures/import_subscribers_partial_success.json