createsend 4.1.2 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +5 -5
  2. data/HISTORY.md +29 -0
  3. data/README.md +4 -4
  4. data/RELEASE.md +1 -1
  5. data/Rakefile +1 -1
  6. data/createsend.gemspec +1 -1
  7. data/lib/createsend/campaign.rb +1 -1
  8. data/lib/createsend/client.rb +25 -3
  9. data/lib/createsend/createsend.rb +3 -1
  10. data/lib/createsend/journey.rb +58 -0
  11. data/lib/createsend/list.rb +13 -12
  12. data/lib/createsend/segment.rb +3 -2
  13. data/lib/createsend/subscriber.rb +15 -10
  14. data/lib/createsend/version.rb +1 -1
  15. data/lib/createsend.rb +1 -0
  16. data/samples/authentication_sample.rb +64 -0
  17. data/samples/clients_sample.rb +79 -0
  18. data/samples/journey_sample.rb +87 -0
  19. data/samples/lists_sample.rb +41 -0
  20. data/samples/segments_sample.rb +21 -0
  21. data/samples/subscribes_sample.rb +22 -0
  22. data/test/administrator_test.rb +3 -3
  23. data/test/campaign_test.rb +6 -5
  24. data/test/client_test.rb +67 -36
  25. data/test/createsend_test.rb +4 -4
  26. data/test/fixtures/active_subscribers.json +5 -0
  27. data/test/fixtures/bounced_subscribers.json +1 -0
  28. data/test/fixtures/campaign_summary.json +2 -1
  29. data/test/fixtures/campaigns.json +37 -26
  30. data/test/fixtures/deleted_subscribers.json +5 -0
  31. data/test/fixtures/drafts.json +4 -2
  32. data/test/fixtures/journey_bounces.json +35 -0
  33. data/test/fixtures/journey_clicks.json +35 -0
  34. data/test/fixtures/journey_opens.json +55 -0
  35. data/test/fixtures/journey_recipients.json +27 -0
  36. data/test/fixtures/journey_summary.json +18 -0
  37. data/test/fixtures/journey_unsubscribes.json +26 -0
  38. data/test/fixtures/journeys.json +20 -0
  39. data/test/fixtures/scheduled_campaigns.json +4 -2
  40. data/test/fixtures/segment_subscribers.json +2 -0
  41. data/test/fixtures/subscriber_details.json +1 -0
  42. data/test/fixtures/subscriber_details_with_track_pref.json +23 -0
  43. data/test/fixtures/tags.json +10 -0
  44. data/test/fixtures/unconfirmed_subscribers.json +6 -2
  45. data/test/fixtures/unsubscribed_subscribers.json +6 -1
  46. data/test/helper.rb +3 -2
  47. data/test/journey_test.rb +156 -0
  48. data/test/list_test.rb +16 -9
  49. data/test/person_test.rb +3 -3
  50. data/test/segment_test.rb +2 -1
  51. data/test/subscriber_test.rb +22 -12
  52. metadata +25 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1cf72a678bbce9cf631fe045d080307019a8a3a7
4
- data.tar.gz: 8b7691c4d61ab08e46c544cd41ce994cd79ae819
2
+ SHA256:
3
+ metadata.gz: 1b2bb4cff071610599c8016946954e43a06069153feacda42c1ed0ec3f358e06
4
+ data.tar.gz: f3a2e2b67d20cc392b04b469a15b6d97ee1a7af65b9e5245a4d262047863164d
5
5
  SHA512:
6
- metadata.gz: 570b370adad853e0f9491e00758b7e989c4d3db98207e385d7c08bf765a29342e16e9893369527867593961b637c84f0c7f2944a560c46f8ac9bfe44e95b1b4f
7
- data.tar.gz: d46d8888041d1a92ce412440821b46769a0d9cc56cda85f79fd4b2700aa11ebc1a90f4093adc04fe969349f8f521595575819e08ff6374ff8e7be0425b1d2424
6
+ metadata.gz: 229d9c032d55f82c23fed36742e5186eb7e2e4c590e5b8acf9f9463aba53241b41ba31dd5be1ca342556876f0b5f1b69c52a54bff8b161c4018b1611e2145baa
7
+ data.tar.gz: 945dc9bc23760e17d1f4a47e155d3cb356e7539e61e0109f3c0324375cc2f05d2bc1224cfcdb382dfa745a2d667a2ead5b8897962de3e0f7504196baf92e065e
data/HISTORY.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # createsend-ruby history
2
2
 
3
+ ## v6.0.0 - 10 Feb, 2022
4
+ * Upgrades to Createsend API v3.3 which includes new breaking changes
5
+ * Breaking: 'client.campaigns' now returned an object to support pagination (use .Results to ge the array of campaigns)
6
+ * Added 'Tags' as another field that is returned in 'client.scheduled', 'client.drafts' and 'client.campaigns'
7
+ * Added 'Name' as another field that is returned in 'campaign.summary'
8
+ * Add new support for 'client.tags' endpoint (ie: getting list of tags for the client)
9
+ * Add support for pagination, filtering and sorting to 'client.campaigns' endpoint
10
+ * Bump `rake` to `~> 12.3.3`
11
+ * Adding support for returning ListJoinedDate for each subscriber.
12
+ * List.Active()
13
+ * List.Bounced()
14
+ * List.Unsubscribed()
15
+ * List.Unconfirmed()
16
+ * List.Deleted()
17
+ * Segment.Subscribers()
18
+ * Subscriber.Get()
19
+
20
+ ## v5.1.1 - 8 Oct, 2021
21
+ * increased default timeout for HTTP requests to 120secs
22
+
23
+ ## v5.1.0 - 3 Sep, 2019
24
+ * Added support for [Journeys API](https://www.campaignmonitor.com/api/journeys/)
25
+
26
+ ## v5.0.0 - 19 Jun, 2018
27
+ * Upgrades to Createsend API v3.2 which includes new breaking changes
28
+ * Breaking: 'Consent to track' field is now mandatory for sending smart and classic transactionl emails
29
+ * Breaking: 'Consent to track' field is now mandatory when adding or updating subscribers
30
+ * Optional 'Include tracking preference' field when retrieving lists of subscribers
31
+
3
32
  ## v4.1.2 - 27 Nov, 2017
4
33
  * Fix for the GZip compression issue: https://github.com/jnunemaker/httparty/issues/562
5
34
 
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # createsend
1
+ # createsend [![Build Status](https://app.travis-ci.com/campaignmonitor/createsend-ruby.svg?branch=master)](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
 
@@ -133,7 +133,7 @@ clients.each do |cl|
133
133
  p "Client: #{cl.Name}"
134
134
  client = CreateSend::Client.new auth, cl.ClientID
135
135
  p "- Campaigns:"
136
- client.campaigns.each do |cm|
136
+ client.drafts.each do |cm|
137
137
  p " - #{cm.Subject}"
138
138
  end
139
139
  end
@@ -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
- [![Build Status](https://secure.travis-ci.org/campaignmonitor/createsend-ruby.png)][travis] [![Coverage Status](https://coveralls.io/repos/campaignmonitor/createsend-ruby/badge.png?branch=master)][coveralls] [![Dependency Status](https://gemnasium.com/campaignmonitor/createsend-ruby.png)][gemnasium] [![Gem Version](https://badge.fury.io/rb/createsend.png)][gembadge]
215
+ [![Build Status](https://app.travis-ci.com/campaignmonitor/createsend-ruby.svg?branch=master)](https://app.travis-ci.com/campaignmonitor/createsend-ruby) [![Coverage Status](https://coveralls.io/repos/campaignmonitor/createsend-ruby/badge.png?branch=master)][coveralls] [![Dependency Status](https://gemnasium.com/campaignmonitor/createsend-ruby.png)][gemnasium] [![Gem Version](https://badge.fury.io/rb/createsend.png)][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.org/campaignmonitor/createsend-ruby) pass, and that [coverage](https://coveralls.io/r/campaignmonitor/createsend-ruby) is maintained or improved.
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 = ["-rubygems"] if defined? Gem
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/createsend.gemspec CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
7
7
  s.add_runtime_dependency 'json', '>= 1.0'
8
8
  s.add_runtime_dependency 'hashie', '~> 3.0'
9
9
  s.add_runtime_dependency 'httparty', '~> 0.14'
10
- s.add_development_dependency 'rake', '~> 10.0'
10
+ s.add_development_dependency 'rake', '~> 12.3.3'
11
11
  s.add_development_dependency 'fakeweb', '~> 1.3'
12
12
  s.add_development_dependency 'jnunemaker-matchy', '~> 0.4'
13
13
  s.add_development_dependency 'shoulda-context', '~> 1.2'
@@ -1,5 +1,5 @@
1
1
  module CreateSend
2
- # Represents a campaign and provides associated funtionality.
2
+ # Represents a campaign and provides associated functionality.
3
3
  class Campaign < CreateSend
4
4
  attr_reader :campaign_id
5
5
 
@@ -25,9 +25,19 @@ module CreateSend
25
25
  end
26
26
 
27
27
  # Gets the sent campaigns belonging to this client.
28
- def campaigns
29
- response = get 'campaigns'
30
- response.map{|item| Hashie::Mash.new(item)}
28
+ def campaigns(page=1, page_size=1000, order_direction="desc",
29
+ sent_from_date='', sent_to_date='', tags='')
30
+ options = { :query => {
31
+ :page => page,
32
+ :pagesize => page_size,
33
+ :orderdirection => order_direction,
34
+ :sentfromdate => sent_from_date,
35
+ :senttodate => sent_to_date,
36
+ :tags => tags
37
+ }}
38
+
39
+ response = get 'campaigns', options
40
+ Hashie::Mash.new(response)
31
41
  end
32
42
 
33
43
  # Gets the currently scheduled campaigns belonging to this client.
@@ -42,6 +52,12 @@ module CreateSend
42
52
  response.map{|item| Hashie::Mash.new(item)}
43
53
  end
44
54
 
55
+ # Gets all the tags belonging to this client.
56
+ def tags
57
+ response = get 'tags'
58
+ response.map{|item| Hashie::Mash.new(item)}
59
+ end
60
+
45
61
  # Gets the subscriber lists belonging to this client.
46
62
  def lists
47
63
  response = get 'lists'
@@ -181,6 +197,12 @@ module CreateSend
181
197
  super "/clients/#{client_id}.json", {}
182
198
  end
183
199
 
200
+ # Gets the journeys belonging to this client.
201
+ def journeys
202
+ response = get 'journeys'
203
+ response.map{|item| Hashie::Mash.new(item)}
204
+ end
205
+
184
206
  private
185
207
 
186
208
  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,7 +111,7 @@ module CreateSend
109
111
  end
110
112
  end
111
113
 
112
- @@base_uri = "https://api.createsend.com/api/v3.1"
114
+ @@base_uri = "https://api.createsend.com/api/v3.3"
113
115
  @@oauth_base_uri = "https://api.createsend.com/oauth"
114
116
  @@oauth_token_uri = "#{@@oauth_base_uri}/token"
115
117
  headers({
@@ -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
@@ -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
@@ -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 => { :email => email_address } }
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 }.to_json }
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 }.to_json }
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
@@ -1,3 +1,3 @@
1
1
  module CreateSend
2
- VERSION = "4.1.2" unless defined?(CreateSend::VERSION)
2
+ VERSION = "6.0.0" unless defined?(CreateSend::VERSION)
3
3
  end
data/lib/createsend.rb CHANGED
@@ -14,3 +14,4 @@ require 'createsend/administrator'
14
14
  require 'createsend/transactional_classic_email'
15
15
  require 'createsend/transactional_smart_email'
16
16
  require 'createsend/transactional_timeline'
17
+ require 'createsend/journey'
@@ -0,0 +1,64 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'createsend'
3
+
4
+ class AuthorizationSample
5
+ def initialize
6
+ raise 'CREATESEND_API_KEY env var missing' if ENV['CREATESEND_API_KEY'].nil?
7
+ raise 'CREATESEND_CLIENT_ID env var missing' if ENV['CREATESEND_CLIENT_ID'].nil?
8
+ raise 'CREATESEND_OAUTH_CLIENT_ID env var missing' if ENV['CREATESEND_OAUTH_CLIENT_ID'].nil?
9
+ raise 'CREATESEND_OAUTH_CLIENT_SECRET env var missing' if ENV['CREATESEND_OAUTH_CLIENT_SECRET'].nil?
10
+ raise 'CREATESEND_OAUTH_REDIRECT_URL env var missing' if ENV['CREATESEND_OAUTH_REDIRECT_URL'].nil?
11
+ raise 'CREATESEND_OAUTH_SCOPE env var missing' if ENV['CREATESEND_OAUTH_SCOPE'].nil?
12
+
13
+ @createsendApiKey = ENV['CREATESEND_API_KEY']
14
+ @oauthClientId = ENV['CREATESEND_OAUTH_CLIENT_ID']
15
+ @oauthClientSecret = ENV['CREATESEND_OAUTH_CLIENT_SECRET']
16
+ @oauthRedirectUrl = ENV['CREATESEND_OAUTH_REDIRECT_URL']
17
+ @oauthScope = ENV['CREATESEND_OAUTH_SCOPE']
18
+ )
19
+ end
20
+
21
+ def authentication_with_api_key
22
+ auth = {:api_key => @createsendApiKey}
23
+ @client = CreateSend::Client.new auth, @createsendClientId
24
+
25
+ @client.scheduled
26
+ end
27
+
28
+ def get_authorise_url
29
+ state = 'some state data'
30
+
31
+ @authorize_url = CreateSend::CreateSend.authorize_url(@oauthClientId, @oauthRedirectUrl, @oauthScope, state);
32
+ end
33
+
34
+ def exchange_token(code)
35
+ CreateSend::CreateSend.exchange_token(
36
+ client_id=@oauthClientId,
37
+ client_secret=@oauthClientSecret,
38
+ redirect_uri=@oauthRedirectUrl,
39
+ code=code # Get the code from the query string after hitting authorise url
40
+ )
41
+ end
42
+
43
+ def authentication_with_oauth(access_token, refresh_token)
44
+ auth = {:access_token => access_token, :refresh_token => refresh_token}
45
+ @client = CreateSend::Client.new auth, @createsendClientId
46
+
47
+ @client.scheduled
48
+ end
49
+ end
50
+
51
+ sample = AuthorizationSample.new
52
+ authoriseUrl = sample.get_authorise_url
53
+ # hit the authorise url, where you would be redirected and receive the code parameter in the query string
54
+ access_token, expires_in, refresh_token = sample.exchange_token('code that you get once you hit authorize url')
55
+
56
+ puts "Getting scheduled campaigns with api authentication: #{sample.authentication_with_api_key.to_json}\n\n"
57
+ puts "Getting authorise url: #{authoriseUrl.to_json}\n\n"
58
+ puts "Getting access_token: #{access_token.to_json}\n\n"
59
+ puts "Getting scheduled campaigns with oauth authentication: #{sample.authentication_with_oauth(access_token, refresh_token).to_json}\n\n"
60
+
61
+
62
+ @client.scheduled
63
+ end
64
+ end
@@ -0,0 +1,79 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'createsend'
3
+
4
+ class ClientsSample
5
+ def initialize
6
+ raise 'CREATESEND_ACCESS_TOKEN env var missing' if ENV['CREATESEND_ACCESS_TOKEN'].nil?
7
+ raise 'CREATESEND_REFRESH_TOKEN env var missing' if ENV['CREATESEND_REFRESH_TOKEN'].nil?
8
+ raise 'CREATESEND_CLIENT_ID env var missing' if ENV['CREATESEND_CLIENT_ID'].nil?
9
+
10
+ auth = auth = {:access_token => ENV['CREATESEND_ACCESS_TOKEN'], :refresh_token => ENV['CREATESEND_REFRESH_TOKEN']}
11
+ @client = CreateSend::Client.new auth, ENV['CREATESEND_CLIENT_ID']
12
+ end
13
+
14
+ def get_all_sent_campaigns
15
+ campaigns = []
16
+ page_number = 1
17
+ loop do
18
+ page = @client.campaigns(page_number)
19
+ page_number += 1
20
+ campaigns.concat(page.Results)
21
+ if page.PageNumber == page.NumberOfPages
22
+ break
23
+ end
24
+ end
25
+
26
+ campaigns
27
+ end
28
+
29
+ def get_sent_campaigns_with_tag_filter
30
+ filtered_campaigns = []
31
+ page_number = 1
32
+ loop do
33
+ page = @client.campaigns(page_number, 1000, 'desc', '', '', 'tag_example, tag_example_2')
34
+ page_number += 1
35
+ filtered_campaigns.concat(page.Results)
36
+ if page.PageNumber == page.NumberOfPages
37
+ break
38
+ end
39
+ end
40
+
41
+ filtered_campaigns
42
+ end
43
+
44
+ def get_2021_sent_campaigns
45
+ 2021_campaigns = []
46
+ page_number = 1
47
+ loop do
48
+ page = @client.campaigns(1, 1000, 'desc', '2021-01-01', '2022-01-01', '')
49
+ page_number += 1
50
+ 2021_campaigns.concat(page.Results)
51
+ if page.PageNumber == page.NumberOfPages
52
+ break
53
+ end
54
+ end
55
+
56
+ 2021_campaigns
57
+ end
58
+
59
+ def get_all_scheduled_campaigns
60
+ @client.scheduled
61
+ end
62
+
63
+ def get_all_draft_campaigns
64
+ @client.drafts
65
+ end
66
+
67
+ def get_all_client_tags
68
+ @client.tags
69
+ end
70
+ end
71
+
72
+ sample = ClientsSample.new
73
+
74
+ puts "All sent campaigns: #{sample.get_all_sent_campaigns.to_json}\n\n"
75
+ puts "All sent campaigns with `tag_example` and `tag_example_2` tag: #{sample.get_sent_campaigns_with_tag_filter.to_json}\n\n"
76
+ puts "All 2021 sent campaigns: #{sample.get_2021_sent_campaigns.to_json}\n\n"
77
+ puts "All scheduled campaigns: #{sample.get_all_scheduled_campaigns.to_json}\n\n"
78
+ puts "All draft campaigns: #{sample.get_all_draft_campaigns.to_json}\n\n"
79
+ puts "All client tags: #{sample.get_all_client_tags.to_json}\n\n"
@@ -0,0 +1,87 @@
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_ACCESS_TOKEN env var missing' if ENV['CREATESEND_ACCESS_TOKEN'].nil?
9
+ raise 'CREATESEND_REFRESH_TOKEN env var missing' if ENV['CREATESEND_REFRESH_TOKEN'].nil?
10
+ raise 'CREATESEND_CLIENT_ID env var missing' if ENV['CREATESEND_CLIENT_ID'].nil?
11
+ raise 'CREATESEND_JOURNEY_ID env var missing' if ENV['CREATESEND_JOURNEY_ID'].nil?
12
+ raise 'CREATESEND_EMAIL_ID env var missing' if ENV['CREATESEND_EMAIL_ID'].nil?
13
+
14
+ auth = {:access_token => ENV['CREATESEND_ACCESS_TOKEN'], :refresh_token => ENV['CREATESEND_REFRESH_TOKEN']}
15
+ @client = CreateSend::Client.new auth, ENV['CREATESEND_CLIENT_ID']
16
+ @journey = CreateSend::Journey.new auth, ENV['CREATESEND_JOURNEY_ID']
17
+ end
18
+
19
+ def get_all_journeys
20
+ @client.journeys
21
+ end
22
+
23
+ def get_journey_summary
24
+ @journey.summary
25
+ end
26
+
27
+ def get_recipients_for_email
28
+ @journey.email_recipients ENV['CREATESEND_EMAIL_ID']
29
+ end
30
+
31
+ def get_email_opens
32
+ opens = []
33
+ loop do
34
+ page = @journey.email_opens email_id = ENV['CREATESEND_EMAIL_ID'], date = @date, order_direction = 'desc'
35
+ opens.concat(page.Results)
36
+ if page.PageNumber == page.NumberOfPages
37
+ break
38
+ end
39
+ end
40
+ opens
41
+ end
42
+
43
+ def get_email_clicks
44
+ clicks = []
45
+ loop do
46
+ page = @journey.email_clicks email_id = ENV['CREATESEND_EMAIL_ID'], date = @date, order_direction = 'desc'
47
+ clicks.concat(page.Results)
48
+ if page.PageNumber == page.NumberOfPages
49
+ break
50
+ end
51
+ end
52
+ clicks
53
+ end
54
+
55
+ def get_email_unsubscribes
56
+ unsubscribes = []
57
+ loop do
58
+ page = @journey.email_unsubscribes email_id = ENV['CREATESEND_EMAIL_ID'], date = @date, order_direction = 'desc'
59
+ unsubscribes.concat(page.Results)
60
+ if page.PageNumber == page.NumberOfPages
61
+ break
62
+ end
63
+ end
64
+ unsubscribes
65
+ end
66
+
67
+ def get_email_bounces
68
+ bounces = []
69
+ loop do
70
+ page = @journey.email_bounces email_id = ENV['CREATESEND_EMAIL_ID'], date = @date, order_direction = 'asc'
71
+ bounces.concat(page.Results)
72
+ if page.PageNumber == page.NumberOfPages
73
+ break
74
+ end
75
+ end
76
+ bounces
77
+ end
78
+ end
79
+
80
+ sample = JourneySample.new
81
+ puts "All journeys: #{sample.get_all_journeys.to_json}\n\n"
82
+ puts "Journey Summary: #{sample.get_journey_summary.to_json}\n\n"
83
+ puts "Email recipients : #{sample.get_recipients_for_email.to_json}\n\n"
84
+ puts "Email Opens : #{sample.get_email_opens.to_json}\n\n"
85
+ puts "Email Clicks : #{sample.get_email_clicks.to_json}\n\n"
86
+ puts "Email Unsubscribes : #{sample.get_email_unsubscribes.to_json}\n\n"
87
+ puts "Email Bounces : #{sample.get_email_bounces.to_json}\n\n"