createsend 4.1.1 → 5.1.1
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.
- checksums.yaml +5 -5
- data/.travis.yml +2 -0
- data/HISTORY.md +15 -0
- data/README.md +3 -3
- data/RELEASE.md +1 -1
- data/Rakefile +1 -1
- data/lib/createsend/campaign.rb +1 -1
- data/lib/createsend/client.rb +6 -0
- data/lib/createsend/createsend.rb +5 -3
- data/lib/createsend/journey.rb +58 -0
- data/lib/createsend/list.rb +13 -12
- data/lib/createsend/segment.rb +3 -2
- data/lib/createsend/subscriber.rb +15 -10
- data/lib/createsend/version.rb +1 -1
- data/lib/createsend.rb +1 -0
- data/samples/journey_sample.rb +86 -0
- data/test/administrator_test.rb +3 -3
- data/test/campaign_test.rb +5 -5
- data/test/client_test.rb +13 -5
- data/test/createsend_test.rb +4 -4
- data/test/fixtures/journey_bounces.json +35 -0
- data/test/fixtures/journey_clicks.json +35 -0
- data/test/fixtures/journey_opens.json +55 -0
- data/test/fixtures/journey_recipients.json +27 -0
- data/test/fixtures/journey_summary.json +18 -0
- data/test/fixtures/journey_unsubscribes.json +26 -0
- data/test/fixtures/journeys.json +20 -0
- data/test/fixtures/subscriber_details_with_track_pref.json +22 -0
- data/test/fixtures/unconfirmed_subscribers.json +4 -2
- data/test/helper.rb +3 -2
- data/test/journey_test.rb +156 -0
- data/test/list_test.rb +10 -9
- data/test/person_test.rb +3 -3
- data/test/segment_test.rb +1 -1
- data/test/subscriber_test.rb +21 -12
- metadata +23 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: a9e3ed5e50f1be54bdb680b399675fef8e72fc1e09d41264ec35d85de005b0ea
|
|
4
|
+
data.tar.gz: 1b39dc69dcb31589101712316897771aa15ba48c8ddd5c6bd6255c2352337db3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c9d44f747b5d4e64692686c47a0ca56f13d55fe97a0674cfc20659e05b8a518df3ac45f33ab8b575945b1ac9dd69fa503c0884cfb74abdbc3c0f306a0642f7a7
|
|
7
|
+
data.tar.gz: 68987336af46b08f9693bf65a1a6fc29af99ee81a044b1468b7a410084191a2e6973595ba1db86406be7c0c7cdace14a968e46e1f83754950bf3ef3a4c5e76a2
|
data/.travis.yml
CHANGED
data/HISTORY.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# createsend-ruby history
|
|
2
2
|
|
|
3
|
+
## v5.1.1 - 8 Oct, 2021
|
|
4
|
+
* increased default timeout for HTTP requests to 120secs
|
|
5
|
+
|
|
6
|
+
## v5.1.0 - 3 Sep, 2019
|
|
7
|
+
* Added support for [Journeys API](https://www.campaignmonitor.com/api/journeys/)
|
|
8
|
+
|
|
9
|
+
## v5.0.0 - 19 Jun, 2018
|
|
10
|
+
* Upgrades to Createsend API v3.2 which includes new breaking changes
|
|
11
|
+
* Breaking: 'Consent to track' field is now mandatory for sending smart and classic transactionl emails
|
|
12
|
+
* Breaking: 'Consent to track' field is now mandatory when adding or updating subscribers
|
|
13
|
+
* Optional 'Include tracking preference' field when retrieving lists of subscribers
|
|
14
|
+
|
|
15
|
+
## v4.1.2 - 27 Nov, 2017
|
|
16
|
+
* Fix for the GZip compression issue: https://github.com/jnunemaker/httparty/issues/562
|
|
17
|
+
|
|
3
18
|
## v4.1.1 - 14 Jan, 2016
|
|
4
19
|
|
|
5
20
|
* Drop support for Ruby 1.9.3 ([#49](https://github.com/campaignmonitor/createsend-ruby/pull/49))
|
data/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# createsend
|
|
1
|
+
# createsend [](https://app.travis-ci.com/campaignmonitor/createsend-ruby)
|
|
2
2
|
|
|
3
3
|
A Ruby library which implements the complete functionality of the [Campaign Monitor API](http://www.campaignmonitor.com/api/). Requires Ruby >= 2.0.0.
|
|
4
4
|
|
|
@@ -193,7 +193,7 @@ For example, if you wanted to find out how to call the `CreateSend::Subscriber.a
|
|
|
193
193
|
should "add a subscriber with custom fields" do
|
|
194
194
|
stub_post(@auth, "subscribers/#{@list_id}.json", "add_subscriber.json")
|
|
195
195
|
custom_fields = [ { :Key => 'website', :Value => 'http://example.com/' } ]
|
|
196
|
-
email_address = CreateSend::Subscriber.add @auth, @list_id, "subscriber@example.com", "Subscriber", custom_fields, true
|
|
196
|
+
email_address = CreateSend::Subscriber.add @auth, @list_id, "subscriber@example.com", "Subscriber", custom_fields, true, "Yes"
|
|
197
197
|
email_address.should == "subscriber@example.com"
|
|
198
198
|
end
|
|
199
199
|
```
|
|
@@ -212,7 +212,7 @@ Please check the [instructions for releasing](https://github.com/campaignmonitor
|
|
|
212
212
|
|
|
213
213
|
## This stuff should be green
|
|
214
214
|
|
|
215
|
-
[](https://app.travis-ci.com/campaignmonitor/createsend-ruby) [][coveralls] [][gemnasium] [][gembadge]
|
|
216
216
|
|
|
217
217
|
[travis]: http://travis-ci.org/campaignmonitor/createsend-ruby
|
|
218
218
|
[coveralls]: https://coveralls.io/r/campaignmonitor/createsend-ruby
|
data/RELEASE.md
CHANGED
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
git push origin master --tags
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
- Ensure that all [tests](https://travis-ci.
|
|
35
|
+
- Ensure that all [tests](https://app.travis-ci.com/github/campaignmonitor/createsend-ruby) pass, and that [coverage](https://coveralls.io/r/campaignmonitor/createsend-ruby) is maintained or improved.
|
|
36
36
|
|
|
37
37
|
- Add a new [GitHub Release](https://github.com/campaignmonitor/createsend-ruby/releases) using the newly created tag.
|
|
38
38
|
|
data/Rakefile
CHANGED
|
@@ -5,7 +5,7 @@ require "./lib/createsend"
|
|
|
5
5
|
|
|
6
6
|
desc "Run tests"
|
|
7
7
|
Rake::TestTask.new(:test) do |test|
|
|
8
|
-
test.ruby_opts = ["-
|
|
8
|
+
test.ruby_opts = ["-rrubygems"] if defined? Gem
|
|
9
9
|
test.libs << "lib" << "test"
|
|
10
10
|
test.pattern = "test/**/*_test.rb"
|
|
11
11
|
puts "running tests."
|
data/lib/createsend/campaign.rb
CHANGED
data/lib/createsend/client.rb
CHANGED
|
@@ -181,6 +181,12 @@ module CreateSend
|
|
|
181
181
|
super "/clients/#{client_id}.json", {}
|
|
182
182
|
end
|
|
183
183
|
|
|
184
|
+
# Gets the journeys belonging to this client.
|
|
185
|
+
def journeys
|
|
186
|
+
response = get 'journeys'
|
|
187
|
+
response.map{|item| Hashie::Mash.new(item)}
|
|
188
|
+
end
|
|
189
|
+
|
|
184
190
|
private
|
|
185
191
|
|
|
186
192
|
def get(action, options = {})
|
|
@@ -44,6 +44,8 @@ module CreateSend
|
|
|
44
44
|
# Provides high level CreateSend functionality/data you'll probably need.
|
|
45
45
|
class CreateSend
|
|
46
46
|
include HTTParty
|
|
47
|
+
default_timeout 120
|
|
48
|
+
|
|
47
49
|
attr_reader :auth_details
|
|
48
50
|
|
|
49
51
|
# Specify cert authority file for cert validation
|
|
@@ -109,13 +111,13 @@ module CreateSend
|
|
|
109
111
|
end
|
|
110
112
|
end
|
|
111
113
|
|
|
112
|
-
@@base_uri = "https://api.createsend.com/api/v3.
|
|
114
|
+
@@base_uri = "https://api.createsend.com/api/v3.2"
|
|
113
115
|
@@oauth_base_uri = "https://api.createsend.com/oauth"
|
|
114
116
|
@@oauth_token_uri = "#{@@oauth_base_uri}/token"
|
|
115
117
|
headers({
|
|
116
118
|
'User-Agent' => USER_AGENT_STRING,
|
|
117
|
-
'Content-Type' => 'application/json; charset=utf-8'
|
|
118
|
-
|
|
119
|
+
'Content-Type' => 'application/json; charset=utf-8'
|
|
120
|
+
})
|
|
119
121
|
base_uri @@base_uri
|
|
120
122
|
|
|
121
123
|
# Authenticate using either OAuth or an API key.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module CreateSend
|
|
2
|
+
# Represents a journey and provides associated functionality
|
|
3
|
+
class Journey < CreateSend
|
|
4
|
+
attr_reader :journey_id
|
|
5
|
+
|
|
6
|
+
def initialize(auth, journey_id)
|
|
7
|
+
@journey_id = journey_id
|
|
8
|
+
super
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Get a full summary of a journey
|
|
12
|
+
def summary
|
|
13
|
+
response = get "/journeys/#{@journey_id}.json"
|
|
14
|
+
Hashie::Mash.new(response)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Gets a list of all recipients of a particular email within a journey
|
|
18
|
+
def email_recipients(email_id="", date="", page=1, page_size=1000, order_direction='asc')
|
|
19
|
+
paged_result_by_date("recipients", email_id, date, page, page_size, order_direction)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Gets a paged list of subscribers who opened a given journey email
|
|
23
|
+
def email_opens(email_id="", date="", page=1, page_size=1000, order_direction='asc')
|
|
24
|
+
paged_result_by_date("opens", email_id, date, page, page_size, order_direction)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Gets a paged list of subscribers who clicked a given journey email
|
|
28
|
+
def email_clicks(email_id="", date="", page=1, page_size=1000, order_direction='asc')
|
|
29
|
+
paged_result_by_date("clicks", email_id, date, page, page_size, order_direction)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Gets a paged result representing all subscribers who unsubscribed from a journey email
|
|
33
|
+
def email_unsubscribes(email_id="", date="", page=1, page_size=1000, order_direction='asc')
|
|
34
|
+
paged_result_by_date("unsubscribes", email_id, date, page, page_size, order_direction)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Gets a paged result of all bounces for a journey email
|
|
38
|
+
def email_bounces(email_id="", date="", page=1, page_size=1000, order_direction='asc')
|
|
39
|
+
paged_result_by_date("bounces", email_id, date, page, page_size, order_direction)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def paged_result_by_date(resource, email_id, date, page, page_size, order_direction)
|
|
45
|
+
options = { :query => {
|
|
46
|
+
:date => date,
|
|
47
|
+
:page => page,
|
|
48
|
+
:pagesize => page_size,
|
|
49
|
+
:orderdirection => order_direction } }
|
|
50
|
+
response = get_journey_email_action email_id, resource, options
|
|
51
|
+
Hashie::Mash.new(response)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def get_journey_email_action(email_id, action, options = {})
|
|
55
|
+
get "/journeys/email/#{email_id}/#{action}.json", options
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
data/lib/createsend/list.rb
CHANGED
|
@@ -116,37 +116,37 @@ module CreateSend
|
|
|
116
116
|
|
|
117
117
|
# Gets the active subscribers for this list.
|
|
118
118
|
def active(date="", page=1, page_size=1000, order_field="email",
|
|
119
|
-
order_direction="asc")
|
|
119
|
+
order_direction="asc", include_tracking_preference=false)
|
|
120
120
|
paged_result_by_date("active", date, page, page_size, order_field,
|
|
121
|
-
order_direction)
|
|
121
|
+
order_direction, include_tracking_preference)
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
# Gets the unconfirmed subscribers for this list.
|
|
125
125
|
def unconfirmed(date="", page=1, page_size=1000, order_field="email",
|
|
126
|
-
order_direction="asc")
|
|
126
|
+
order_direction="asc", include_tracking_preference=false)
|
|
127
127
|
paged_result_by_date("unconfirmed", date, page, page_size, order_field,
|
|
128
|
-
order_direction)
|
|
128
|
+
order_direction, include_tracking_preference)
|
|
129
129
|
end
|
|
130
130
|
|
|
131
131
|
# Gets the bounced subscribers for this list.
|
|
132
132
|
def bounced(date="", page=1, page_size=1000, order_field="email",
|
|
133
|
-
order_direction="asc")
|
|
133
|
+
order_direction="asc", include_tracking_preference=false)
|
|
134
134
|
paged_result_by_date("bounced", date, page, page_size, order_field,
|
|
135
|
-
order_direction)
|
|
135
|
+
order_direction, include_tracking_preference)
|
|
136
136
|
end
|
|
137
137
|
|
|
138
138
|
# Gets the unsubscribed subscribers for this list.
|
|
139
139
|
def unsubscribed(date="", page=1, page_size=1000, order_field="email",
|
|
140
|
-
order_direction="asc")
|
|
140
|
+
order_direction="asc", include_tracking_preference=false)
|
|
141
141
|
paged_result_by_date("unsubscribed", date, page, page_size, order_field,
|
|
142
|
-
order_direction)
|
|
142
|
+
order_direction, include_tracking_preference)
|
|
143
143
|
end
|
|
144
144
|
|
|
145
145
|
# Gets the deleted subscribers for this list.
|
|
146
146
|
def deleted(date="", page=1, page_size=1000, order_field="email",
|
|
147
|
-
order_direction="asc")
|
|
147
|
+
order_direction="asc", include_tracking_preference=false)
|
|
148
148
|
paged_result_by_date("deleted", date, page, page_size, order_field,
|
|
149
|
-
order_direction)
|
|
149
|
+
order_direction, include_tracking_preference)
|
|
150
150
|
end
|
|
151
151
|
|
|
152
152
|
# Updates this list.
|
|
@@ -225,13 +225,14 @@ module CreateSend
|
|
|
225
225
|
private
|
|
226
226
|
|
|
227
227
|
def paged_result_by_date(resource, date, page, page_size, order_field,
|
|
228
|
-
order_direction)
|
|
228
|
+
order_direction, include_tracking_preference)
|
|
229
229
|
options = { :query => {
|
|
230
230
|
:date => date,
|
|
231
231
|
:page => page,
|
|
232
232
|
:pagesize => page_size,
|
|
233
233
|
:orderfield => order_field,
|
|
234
|
-
:orderdirection => order_direction
|
|
234
|
+
:orderdirection => order_direction,
|
|
235
|
+
:includetrackingpreference => include_tracking_preference } }
|
|
235
236
|
response = get resource, options
|
|
236
237
|
Hashie::Mash.new(response)
|
|
237
238
|
end
|
data/lib/createsend/segment.rb
CHANGED
|
@@ -35,13 +35,14 @@ module CreateSend
|
|
|
35
35
|
|
|
36
36
|
# Gets the active subscribers in this segment.
|
|
37
37
|
def subscribers(date="", page=1, page_size=1000, order_field="email",
|
|
38
|
-
order_direction="asc")
|
|
38
|
+
order_direction="asc", include_tracking_preference=false)
|
|
39
39
|
options = { :query => {
|
|
40
40
|
:date => date,
|
|
41
41
|
:page => page,
|
|
42
42
|
:pagesize => page_size,
|
|
43
43
|
:orderfield => order_field,
|
|
44
|
-
:orderdirection => order_direction
|
|
44
|
+
:orderdirection => order_direction,
|
|
45
|
+
:includetrackingpreference => include_tracking_preference } }
|
|
45
46
|
response = get "active", options
|
|
46
47
|
Hashie::Mash.new(response)
|
|
47
48
|
end
|
|
@@ -11,23 +11,27 @@ module CreateSend
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
# Gets a subscriber by list ID and email address.
|
|
14
|
-
def self.get(auth, list_id, email_address)
|
|
15
|
-
options = { :query => {
|
|
14
|
+
def self.get(auth, list_id, email_address, include_tracking_preference=false)
|
|
15
|
+
options = { :query => {
|
|
16
|
+
:email => email_address,
|
|
17
|
+
:includetrackingpreference => include_tracking_preference }
|
|
18
|
+
}
|
|
16
19
|
cs = CreateSend.new auth
|
|
17
20
|
response = cs.get "/subscribers/#{list_id}.json", options
|
|
18
21
|
Hashie::Mash.new(response)
|
|
19
22
|
end
|
|
20
23
|
|
|
21
24
|
# Adds a subscriber to a subscriber list.
|
|
22
|
-
def self.add(auth, list_id, email_address, name, custom_fields, resubscribe,
|
|
23
|
-
restart_subscription_based_autoresponders=false)
|
|
25
|
+
def self.add(auth, list_id, email_address, name, custom_fields, resubscribe,
|
|
26
|
+
consent_to_track, restart_subscription_based_autoresponders=false)
|
|
24
27
|
options = { :body => {
|
|
25
28
|
:EmailAddress => email_address,
|
|
26
29
|
:Name => name,
|
|
27
30
|
:CustomFields => custom_fields,
|
|
28
31
|
:Resubscribe => resubscribe,
|
|
29
|
-
:RestartSubscriptionBasedAutoresponders =>
|
|
30
|
-
restart_subscription_based_autoresponders
|
|
32
|
+
:RestartSubscriptionBasedAutoresponders =>
|
|
33
|
+
restart_subscription_based_autoresponders,
|
|
34
|
+
:ConsentToTrack => consent_to_track }.to_json }
|
|
31
35
|
cs = CreateSend.new auth
|
|
32
36
|
response = cs.post "/subscribers/#{list_id}.json", options
|
|
33
37
|
response.parsed_response
|
|
@@ -65,8 +69,8 @@ module CreateSend
|
|
|
65
69
|
|
|
66
70
|
# Updates any aspect of a subscriber, including email address, name, and
|
|
67
71
|
# custom field data if supplied.
|
|
68
|
-
def update(new_email_address, name, custom_fields, resubscribe,
|
|
69
|
-
restart_subscription_based_autoresponders=false)
|
|
72
|
+
def update(new_email_address, name, custom_fields, resubscribe,
|
|
73
|
+
consent_to_track, restart_subscription_based_autoresponders=false)
|
|
70
74
|
options = {
|
|
71
75
|
:query => { :email => @email_address },
|
|
72
76
|
:body => {
|
|
@@ -74,8 +78,9 @@ module CreateSend
|
|
|
74
78
|
:Name => name,
|
|
75
79
|
:CustomFields => custom_fields,
|
|
76
80
|
:Resubscribe => resubscribe,
|
|
77
|
-
:RestartSubscriptionBasedAutoresponders =>
|
|
78
|
-
restart_subscription_based_autoresponders
|
|
81
|
+
:RestartSubscriptionBasedAutoresponders =>
|
|
82
|
+
restart_subscription_based_autoresponders,
|
|
83
|
+
:ConsentToTrack => consent_to_track }.to_json }
|
|
79
84
|
put "/subscribers/#{@list_id}.json", options
|
|
80
85
|
# Update @email_address, so this object can continue to be used reliably
|
|
81
86
|
@email_address = new_email_address
|
data/lib/createsend/version.rb
CHANGED
data/lib/createsend.rb
CHANGED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
2
|
+
require 'createsend'
|
|
3
|
+
|
|
4
|
+
class JourneySample
|
|
5
|
+
@date = "2019-01-01 00:00"
|
|
6
|
+
|
|
7
|
+
def initialize
|
|
8
|
+
raise 'CREATESEND_API_KEY env var missing' if ENV['CREATESEND_API_KEY'].nil?
|
|
9
|
+
raise 'CREATESEND_CLIENT_ID env var missing' if ENV['CREATESEND_CLIENT_ID'].nil?
|
|
10
|
+
raise 'CREATESEND_JOURNEY_ID env var missing' if ENV['CREATESEND_JOURNEY_ID'].nil?
|
|
11
|
+
raise 'CREATESEND_EMAIL_ID env var missing' if ENV['CREATESEND_EMAIL_ID'].nil?
|
|
12
|
+
|
|
13
|
+
auth = {:api_key => ENV['CREATESEND_API_KEY']}
|
|
14
|
+
@client = CreateSend::Client.new auth, ENV['CREATESEND_CLIENT_ID']
|
|
15
|
+
@journey = CreateSend::Journey.new auth, ENV['CREATESEND_JOURNEY_ID']
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def get_all_journeys
|
|
19
|
+
@client.journeys
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def get_journey_summary
|
|
23
|
+
@journey.summary
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def get_recipients_for_email
|
|
27
|
+
@journey.email_recipients ENV['CREATESEND_EMAIL_ID']
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def get_email_opens
|
|
31
|
+
opens = []
|
|
32
|
+
loop do
|
|
33
|
+
page = @journey.email_opens email_id = ENV['CREATESEND_EMAIL_ID'], date = @date, order_direction = 'desc'
|
|
34
|
+
opens.concat(page.Results)
|
|
35
|
+
if page.PageNumber == page.NumberOfPages
|
|
36
|
+
break
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
opens
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def get_email_clicks
|
|
43
|
+
clicks = []
|
|
44
|
+
loop do
|
|
45
|
+
page = @journey.email_clicks email_id = ENV['CREATESEND_EMAIL_ID'], date = @date, order_direction = 'desc'
|
|
46
|
+
clicks.concat(page.Results)
|
|
47
|
+
if page.PageNumber == page.NumberOfPages
|
|
48
|
+
break
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
clicks
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def get_email_unsubscribes
|
|
55
|
+
unsubscribes = []
|
|
56
|
+
loop do
|
|
57
|
+
page = @journey.email_unsubscribes email_id = ENV['CREATESEND_EMAIL_ID'], date = @date, order_direction = 'desc'
|
|
58
|
+
unsubscribes.concat(page.Results)
|
|
59
|
+
if page.PageNumber == page.NumberOfPages
|
|
60
|
+
break
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
unsubscribes
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def get_email_bounces
|
|
67
|
+
bounces = []
|
|
68
|
+
loop do
|
|
69
|
+
page = @journey.email_bounces email_id = ENV['CREATESEND_EMAIL_ID'], date = @date, order_direction = 'asc'
|
|
70
|
+
bounces.concat(page.Results)
|
|
71
|
+
if page.PageNumber == page.NumberOfPages
|
|
72
|
+
break
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
bounces
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
sample = JourneySample.new
|
|
80
|
+
puts "All journeys: #{sample.get_all_journeys.to_json}\n\n"
|
|
81
|
+
puts "Journey Summary: #{sample.get_journey_summary.to_json}\n\n"
|
|
82
|
+
puts "Email recipients : #{sample.get_recipients_for_email.to_json}\n\n"
|
|
83
|
+
puts "Email Opens : #{sample.get_email_opens.to_json}\n\n"
|
|
84
|
+
puts "Email Clicks : #{sample.get_email_clicks.to_json}\n\n"
|
|
85
|
+
puts "Email Unsubscribes : #{sample.get_email_unsubscribes.to_json}\n\n"
|
|
86
|
+
puts "Email Bounces : #{sample.get_email_bounces.to_json}\n\n"
|
data/test/administrator_test.rb
CHANGED
|
@@ -8,7 +8,7 @@ class AdministratorTest < Test::Unit::TestCase
|
|
|
8
8
|
|
|
9
9
|
should "get a administrator by email address" do
|
|
10
10
|
email = "admin@example.com"
|
|
11
|
-
stub_get(@auth, "admins.json?email=#{
|
|
11
|
+
stub_get(@auth, "admins.json?email=#{ERB::Util.url_encode(email)}", "admin_details.json")
|
|
12
12
|
admin = CreateSend::Administrator.get @auth, email
|
|
13
13
|
admin.EmailAddress.should == email
|
|
14
14
|
admin.Name.should == "Admin One"
|
|
@@ -24,13 +24,13 @@ class AdministratorTest < Test::Unit::TestCase
|
|
|
24
24
|
should "update an administrator" do
|
|
25
25
|
email = "admin@example.com"
|
|
26
26
|
new_email = "new_email_address@example.com"
|
|
27
|
-
stub_put(@auth, "admins.json?email=#{
|
|
27
|
+
stub_put(@auth, "admins.json?email=#{ERB::Util.url_encode(email)}", nil)
|
|
28
28
|
@admin.update new_email, "Admin Name"
|
|
29
29
|
@admin.email_address.should == new_email
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
should "delete an admin" do
|
|
33
|
-
stub_delete(@auth, "admins.json?email=#{
|
|
33
|
+
stub_delete(@auth, "admins.json?email=#{ERB::Util.url_encode(@admin.email_address)}", nil)
|
|
34
34
|
@admin.delete
|
|
35
35
|
end
|
|
36
36
|
end
|
data/test/campaign_test.rb
CHANGED
|
@@ -191,7 +191,7 @@ class CampaignTest < Test::Unit::TestCase
|
|
|
191
191
|
|
|
192
192
|
should "get the opens for a campaign" do
|
|
193
193
|
min_date = "2010-01-01"
|
|
194
|
-
stub_get(@auth, "campaigns/#{@campaign.campaign_id}/opens.json?page=1&pagesize=1000&orderfield=date&orderdirection=asc&date=#{
|
|
194
|
+
stub_get(@auth, "campaigns/#{@campaign.campaign_id}/opens.json?page=1&pagesize=1000&orderfield=date&orderdirection=asc&date=#{ERB::Util.url_encode(min_date)}", "campaign_opens.json")
|
|
195
195
|
opens = @campaign.opens min_date
|
|
196
196
|
opens.Results.size.should == 5
|
|
197
197
|
opens.Results.first.EmailAddress.should == "subs+6576576576@example.com"
|
|
@@ -215,7 +215,7 @@ class CampaignTest < Test::Unit::TestCase
|
|
|
215
215
|
|
|
216
216
|
should "get the subscriber clicks for a campaign" do
|
|
217
217
|
min_date = "2010-01-01"
|
|
218
|
-
stub_get(@auth, "campaigns/#{@campaign.campaign_id}/clicks.json?page=1&pagesize=1000&orderfield=date&orderdirection=asc&date=#{
|
|
218
|
+
stub_get(@auth, "campaigns/#{@campaign.campaign_id}/clicks.json?page=1&pagesize=1000&orderfield=date&orderdirection=asc&date=#{ERB::Util.url_encode(min_date)}", "campaign_clicks.json")
|
|
219
219
|
clicks = @campaign.clicks min_date
|
|
220
220
|
clicks.Results.size.should == 3
|
|
221
221
|
clicks.Results.first.EmailAddress.should == "subs+6576576576@example.com"
|
|
@@ -240,7 +240,7 @@ class CampaignTest < Test::Unit::TestCase
|
|
|
240
240
|
|
|
241
241
|
should "get the unsubscribes for a campaign" do
|
|
242
242
|
min_date = "2010-01-01"
|
|
243
|
-
stub_get(@auth, "campaigns/#{@campaign.campaign_id}/unsubscribes.json?page=1&pagesize=1000&orderfield=date&orderdirection=asc&date=#{
|
|
243
|
+
stub_get(@auth, "campaigns/#{@campaign.campaign_id}/unsubscribes.json?page=1&pagesize=1000&orderfield=date&orderdirection=asc&date=#{ERB::Util.url_encode(min_date)}", "campaign_unsubscribes.json")
|
|
244
244
|
unsubscribes = @campaign.unsubscribes min_date
|
|
245
245
|
unsubscribes.Results.size.should == 1
|
|
246
246
|
unsubscribes.Results.first.EmailAddress.should == "subs+6576576576@example.com"
|
|
@@ -258,7 +258,7 @@ class CampaignTest < Test::Unit::TestCase
|
|
|
258
258
|
|
|
259
259
|
should "get the spam complaints for a campaign" do
|
|
260
260
|
min_date = "2010-01-01"
|
|
261
|
-
stub_get(@auth, "campaigns/#{@campaign.campaign_id}/spam.json?page=1&pagesize=1000&orderfield=date&orderdirection=asc&date=#{
|
|
261
|
+
stub_get(@auth, "campaigns/#{@campaign.campaign_id}/spam.json?page=1&pagesize=1000&orderfield=date&orderdirection=asc&date=#{ERB::Util.url_encode(min_date)}", "campaign_spam.json")
|
|
262
262
|
spam = @campaign.spam min_date
|
|
263
263
|
spam.Results.size.should == 1
|
|
264
264
|
spam.Results.first.EmailAddress.should == "subs+6576576576@example.com"
|
|
@@ -275,7 +275,7 @@ class CampaignTest < Test::Unit::TestCase
|
|
|
275
275
|
|
|
276
276
|
should "get the bounces for a campaign" do
|
|
277
277
|
min_date = "2010-01-01"
|
|
278
|
-
stub_get(@auth, "campaigns/#{@campaign.campaign_id}/bounces.json?page=1&pagesize=1000&orderfield=date&orderdirection=asc&date=#{
|
|
278
|
+
stub_get(@auth, "campaigns/#{@campaign.campaign_id}/bounces.json?page=1&pagesize=1000&orderfield=date&orderdirection=asc&date=#{ERB::Util.url_encode(min_date)}", "campaign_bounces.json")
|
|
279
279
|
bounces = @campaign.bounces min_date
|
|
280
280
|
bounces.Results.size.should == 2
|
|
281
281
|
bounces.Results.first.EmailAddress.should == "asdf@softbouncemyemail.com"
|
data/test/client_test.rb
CHANGED
|
@@ -10,7 +10,7 @@ class ClientTest < Test::Unit::TestCase
|
|
|
10
10
|
should "create a client" do
|
|
11
11
|
stub_post(@auth, "clients.json", "create_client.json")
|
|
12
12
|
client_id = CreateSend::Client.create @auth, "Client Company Name", "(GMT+10:00) Canberra, Melbourne, Sydney", "Australia"
|
|
13
|
-
client_id.should == "32a381c49a2df99f1d0c6f3c112352b9"
|
|
13
|
+
client_id.parsed_response.should == "32a381c49a2df99f1d0c6f3c112352b9"
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
should "get details of a client" do
|
|
@@ -83,7 +83,7 @@ class ClientTest < Test::Unit::TestCase
|
|
|
83
83
|
|
|
84
84
|
should "get all lists to which a subscriber with a particular email address belongs" do
|
|
85
85
|
email = "valid@example.com"
|
|
86
|
-
stub_get(@auth, "clients/#{@client.client_id}/listsforemail.json?email=#{
|
|
86
|
+
stub_get(@auth, "clients/#{@client.client_id}/listsforemail.json?email=#{ERB::Util.url_encode(email)}", "listsforemail.json")
|
|
87
87
|
lists = @client.lists_for_email(email)
|
|
88
88
|
lists.size.should == 2
|
|
89
89
|
lists.first.ListID.should == 'ab4a2b57c7c8f1ba62f898a1af1a575b'
|
|
@@ -131,7 +131,7 @@ class ClientTest < Test::Unit::TestCase
|
|
|
131
131
|
|
|
132
132
|
should "unsuppress an email address" do
|
|
133
133
|
email = "example@example.com"
|
|
134
|
-
stub_put(@auth, "clients/#{@client.client_id}/unsuppress.json?email=#{
|
|
134
|
+
stub_put(@auth, "clients/#{@client.client_id}/unsuppress.json?email=#{ERB::Util.url_encode(email)}", nil)
|
|
135
135
|
result = @client.unsuppress email
|
|
136
136
|
end
|
|
137
137
|
|
|
@@ -155,7 +155,7 @@ class ClientTest < Test::Unit::TestCase
|
|
|
155
155
|
|
|
156
156
|
should "set primary contact" do
|
|
157
157
|
email = 'person@blackhole.com'
|
|
158
|
-
stub_put(@auth, "clients/#{@client.client_id}/primarycontact.json?email=#{
|
|
158
|
+
stub_put(@auth, "clients/#{@client.client_id}/primarycontact.json?email=#{ERB::Util.url_encode(email)}", 'client_set_primary_contact.json')
|
|
159
159
|
result = @client.set_primary_contact email
|
|
160
160
|
result.EmailAddress.should == email
|
|
161
161
|
end
|
|
@@ -217,6 +217,14 @@ class ClientTest < Test::Unit::TestCase
|
|
|
217
217
|
stub_delete(@auth, "clients/#{@client.client_id}.json", nil)
|
|
218
218
|
@client.delete
|
|
219
219
|
end
|
|
220
|
-
|
|
220
|
+
|
|
221
|
+
should "get all journeys" do
|
|
222
|
+
stub_get(@auth, "clients/#{@client.client_id}/journeys.json", "journeys.json")
|
|
223
|
+
lists = @client.journeys
|
|
224
|
+
lists.size.should == 3
|
|
225
|
+
lists.first.ListID.should == 'a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a'
|
|
226
|
+
lists.first.Name.should == 'Journey One'
|
|
227
|
+
lists.first.Status.should == 'Not started'
|
|
228
|
+
end
|
|
221
229
|
end
|
|
222
230
|
end
|
data/test/createsend_test.rb
CHANGED
|
@@ -82,7 +82,7 @@ class CreateSendTest < Test::Unit::TestCase
|
|
|
82
82
|
FakeWeb.register_uri(:post, "https://api.createsend.com/oauth/token", options)
|
|
83
83
|
new_access_token, new_expires_in, new_refresh_token = CreateSend::CreateSend.refresh_access_token refresh_token
|
|
84
84
|
|
|
85
|
-
FakeWeb.last_request.body.should == "grant_type=refresh_token&refresh_token=#{
|
|
85
|
+
FakeWeb.last_request.body.should == "grant_type=refresh_token&refresh_token=#{ERB::Util.url_encode(refresh_token)}"
|
|
86
86
|
new_access_token.should == "SlAV32hkKG2e12e"
|
|
87
87
|
new_expires_in.should == 1209600
|
|
88
88
|
new_refresh_token.should == "tGzv3JOkF0XG5Qx2TlKWIA"
|
|
@@ -97,7 +97,7 @@ class CreateSendTest < Test::Unit::TestCase
|
|
|
97
97
|
lambda { access_token, expires_in, refresh_token = CreateSend::CreateSend.refresh_access_token(
|
|
98
98
|
refresh_token) }.should raise_error(
|
|
99
99
|
Exception, 'Error refreshing access token: invalid_grant - Specified refresh_token was invalid or expired')
|
|
100
|
-
FakeWeb.last_request.body.should == "grant_type=refresh_token&refresh_token=#{
|
|
100
|
+
FakeWeb.last_request.body.should == "grant_type=refresh_token&refresh_token=#{ERB::Util.url_encode(refresh_token)}"
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
end
|
|
@@ -120,7 +120,7 @@ class CreateSendTest < Test::Unit::TestCase
|
|
|
120
120
|
cs = CreateSend::CreateSend.new @auth
|
|
121
121
|
new_access_token, new_expires_in, new_refresh_token = cs.refresh_token
|
|
122
122
|
|
|
123
|
-
FakeWeb.last_request.body.should == "grant_type=refresh_token&refresh_token=#{
|
|
123
|
+
FakeWeb.last_request.body.should == "grant_type=refresh_token&refresh_token=#{ERB::Util.url_encode(@auth[:refresh_token])}"
|
|
124
124
|
new_access_token.should == "SlAV32hkKG2e12e"
|
|
125
125
|
new_expires_in.should == 1209600
|
|
126
126
|
new_refresh_token.should == "tGzv3JOkF0XG5Qx2TlKWIA"
|
|
@@ -246,7 +246,7 @@ class CreateSendTest < Test::Unit::TestCase
|
|
|
246
246
|
|
|
247
247
|
should "set primary contact" do
|
|
248
248
|
email = 'admin@blackhole.com'
|
|
249
|
-
stub_put(@auth, "primarycontact.json?email=#{
|
|
249
|
+
stub_put(@auth, "primarycontact.json?email=#{ERB::Util.url_encode(email)}", 'admin_set_primary_contact.json')
|
|
250
250
|
result = @cs.set_primary_contact email
|
|
251
251
|
result.EmailAddress.should == email
|
|
252
252
|
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Results": [
|
|
3
|
+
{
|
|
4
|
+
"EmailAddress": "example+1@example.com",
|
|
5
|
+
"BounceType": "4",
|
|
6
|
+
"Date": "2019-07-29 10:33:00",
|
|
7
|
+
"Reason": "Soft Bounce - Mailbox Full"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"EmailAddress": "example+2@example.com",
|
|
11
|
+
"BounceType": "1",
|
|
12
|
+
"Date": "2019-07-29 10:35:00",
|
|
13
|
+
"Reason": "Hard Bounce"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"EmailAddress": "example+3@example.com",
|
|
17
|
+
"BounceType": "1",
|
|
18
|
+
"Date": "2019-07-29 10:35:00",
|
|
19
|
+
"Reason": "Hard Bounce"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"EmailAddress": "example+4@example.com",
|
|
23
|
+
"BounceType": "1",
|
|
24
|
+
"Date": "2019-07-29 10:35:00",
|
|
25
|
+
"Reason": "Hard Bounce"
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"ResultsOrderedBy": "Date",
|
|
29
|
+
"OrderDirection": "ASC",
|
|
30
|
+
"PageNumber": 1,
|
|
31
|
+
"PageSize": 1000,
|
|
32
|
+
"RecordsOnThisPage": 4,
|
|
33
|
+
"TotalNumberOfRecords": 4,
|
|
34
|
+
"NumberOfPages": 1
|
|
35
|
+
}
|