createsend 2.2.0 → 2.3.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.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- createsend (2.2.0)
4
+ createsend (2.3.0)
5
5
  hashie (~> 1.0)
6
6
  httparty (~> 0.8)
7
7
  json
@@ -18,7 +18,7 @@ GEM
18
18
  httparty (0.8.1)
19
19
  multi_json
20
20
  multi_xml
21
- i18n (0.6.0)
21
+ i18n (0.6.1)
22
22
  jnunemaker-matchy (0.4.0)
23
23
  json (1.7.4)
24
24
  metaclass (0.0.1)
@@ -27,11 +27,11 @@ GEM
27
27
  multi_json (1.0.3)
28
28
  multi_xml (0.4.1)
29
29
  rake (0.9.2.2)
30
- shoulda (3.1.1)
30
+ shoulda (3.3.0)
31
31
  shoulda-context (~> 1.0)
32
- shoulda-matchers (~> 1.2)
32
+ shoulda-matchers (~> 1.4)
33
33
  shoulda-context (1.0.0)
34
- shoulda-matchers (1.2.0)
34
+ shoulda-matchers (1.4.0)
35
35
  activesupport (>= 3.0.0)
36
36
 
37
37
  PLATFORMS
@@ -44,4 +44,4 @@ DEPENDENCIES
44
44
  jnunemaker-matchy (~> 0.4)
45
45
  mocha (~> 0.9)
46
46
  rake
47
- shoulda (~> 3.1.1)
47
+ shoulda (~> 3.3.0)
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.add_development_dependency('fakeweb', '~> 1.3')
9
9
  s.add_development_dependency('jnunemaker-matchy', '~> 0.4')
10
10
  s.add_development_dependency('mocha', '~> 0.9')
11
- s.add_development_dependency('shoulda', '~> 3.1.1')
11
+ s.add_development_dependency('shoulda', '~> 3.3.0')
12
12
  s.add_development_dependency('cane')
13
13
  s.add_runtime_dependency('json')
14
14
  s.add_runtime_dependency('hashie', '~> 1.0')
@@ -27,6 +27,25 @@ module CreateSend
27
27
  response.parsed_response
28
28
  end
29
29
 
30
+ # Creates a new campaign for a client, from a template.
31
+ def self.create_from_template(client_id, subject, name, from_name,
32
+ from_email, reply_to, list_ids, segment_ids, template_id,
33
+ template_content)
34
+ options = { :body => {
35
+ :Subject => subject,
36
+ :Name => name,
37
+ :FromName => from_name,
38
+ :FromEmail => from_email,
39
+ :ReplyTo => reply_to,
40
+ :ListIDs => list_ids,
41
+ :SegmentIDs => segment_ids,
42
+ :TemplateID => template_id,
43
+ :TemplateContent => template_content }.to_json }
44
+ response = CreateSend.post(
45
+ "/campaigns/#{client_id}/fromtemplate.json", options)
46
+ response.parsed_response
47
+ end
48
+
30
49
  # Sends a preview of this campaign.
31
50
  def send_preview(recipients, personalize="fallback")
32
51
  options = { :body => {
@@ -93,6 +93,13 @@ module CreateSend
93
93
  Hashie::Mash.new(response)
94
94
  end
95
95
 
96
+ # Unsuppresses an email address by removing it from the the client's
97
+ # suppression list
98
+ def unsuppress(email)
99
+ options = { :query => { :email => email }, :body => '' }
100
+ response = put "unsuppress", options
101
+ end
102
+
96
103
  # Gets the templates belonging to this client.
97
104
  def templates
98
105
  response = get 'templates'
@@ -1,3 +1,3 @@
1
1
  module CreateSend
2
- VERSION = "2.2.0" unless defined?(CreateSend::VERSION)
2
+ VERSION = "2.3.0" unless defined?(CreateSend::VERSION)
3
3
  end
@@ -17,6 +17,88 @@ class CampaignTest < Test::Unit::TestCase
17
17
  campaign_id.should == "787y87y87y87y87y87y87"
18
18
  end
19
19
 
20
+ should "create a campaign from a template" do
21
+ template_content = {
22
+ :Singlelines => [
23
+ {
24
+ :Content => "This is a heading",
25
+ :Alt => "This is alt text",
26
+ :Href => "http://example.com/"
27
+ }
28
+ ],
29
+ :Multilines => [
30
+ {
31
+ :Content => "<p>This is example</p><p>multiline \
32
+ <a href=\"http://example.com\">content</a>...</p>"
33
+ }
34
+ ],
35
+ :Images => [
36
+ {
37
+ :Content => "http://example.com/image.png",
38
+ :Alt => "This is alt text for an image",
39
+ :Href => "http://example.com/"
40
+ }
41
+ ],
42
+ :Repeaters => [
43
+ {
44
+ :Items => [
45
+ {
46
+ :Layout => "My layout",
47
+ :Singlelines => [
48
+ {
49
+ :Content => "This is a repeater heading",
50
+ :Href => "http://example.com/"
51
+ }
52
+ ],
53
+ :Multilines => [
54
+ {
55
+ :Content => "<p>This is example</p><p>multiline \
56
+ <a href=\"http://example.com\">content</a>...</p>"
57
+ }
58
+ ],
59
+ :Images => [
60
+ {
61
+ :Content => "http://example.com/repeater-image.png",
62
+ :Alt => "This is alt text for a repeater image",
63
+ :Href => "http://example.com/"
64
+ }
65
+ ]
66
+ }
67
+ ]
68
+ }
69
+ ]
70
+ }
71
+
72
+ # template_content as defined above would be used to fill the content of
73
+ # a template with markup similar to the following:
74
+ #
75
+ # <html>
76
+ # <head><title>My Template</title></head>
77
+ # <body>
78
+ # <p><singleline>Enter heading...</singleline></p>
79
+ # <div><multiline>Enter description...</multiline></div>
80
+ # <img id="header-image" editable="true" width="500" />
81
+ # <repeater>
82
+ # <layout label="My layout">
83
+ # <div class="repeater-item">
84
+ # <p><singleline></singleline></p>
85
+ # <div><multiline></multiline></div>
86
+ # <img editable="true" width="500" />
87
+ # </div>
88
+ # </layout>
89
+ # </repeater>
90
+ # <p><unsubscribe>Unsubscribe</unsubscribe></p>
91
+ # </body>
92
+ # </html>
93
+
94
+ client_id = '87y8d7qyw8d7yq8w7ydwqwd'
95
+ stub_post(@api_key, "campaigns/#{client_id}/fromtemplate.json", "create_campaign.json")
96
+ campaign_id = CreateSend::Campaign.create_from_template client_id, "subject", "name", "g'day", "good.day@example.com", "good.day@example.com",
97
+ [ '7y12989e82ue98u2e', 'dh9w89q8w98wudwd989' ], [ 'y78q9w8d9w8ud9q8uw', 'djw98quw9duqw98uwd98' ],
98
+ "7j8uw98udowy12989e8298u2e", template_content
99
+ campaign_id.should == "787y87y87y87y87y87y87"
100
+ end
101
+
20
102
  should "send a preview of a draft campaign" do
21
103
  stub_post(@api_key, "campaigns/#{@campaign.campaign_id}/sendpreview.json", nil)
22
104
  @campaign.send_preview [ "test+89898u9@example.com", "test+787y8y7y8@example.com" ], "random"
@@ -14,7 +14,7 @@ class ClientTest < Test::Unit::TestCase
14
14
  client_id = CreateSend::Client.create "Client Company Name", "(GMT+10:00) Canberra, Melbourne, Sydney", "Australia"
15
15
  client_id.should == "32a381c49a2df99f1d0c6f3c112352b9"
16
16
  end
17
-
17
+
18
18
  should "get details of a client" do
19
19
  stub_get(@api_key, "clients/#{@client.client_id}.json", "client_details.json")
20
20
  cl = @client.details
@@ -107,6 +107,12 @@ class ClientTest < Test::Unit::TestCase
107
107
  res.Results.first.State.should == "Suppressed"
108
108
  end
109
109
 
110
+ should "unsuppress an email address" do
111
+ email = "example@example.com"
112
+ stub_put(@api_key, "clients/#{@client.client_id}/unsuppress.json?email=#{CGI.escape(email)}", nil)
113
+ result = @client.unsuppress email
114
+ end
115
+
110
116
  should "get all people" do
111
117
  stub_get(@api_key, "clients/#{@client.client_id}/people.json", "people.json")
112
118
  people = @client.people
@@ -147,26 +153,35 @@ class ClientTest < Test::Unit::TestCase
147
153
  stub_put(@api_key, "clients/#{@client.client_id}/setpaygbilling.json", nil)
148
154
  @client.set_payg_billing "CAD", true, true, 150
149
155
  end
150
-
156
+
151
157
  should "set monthly billing (implicit)" do
152
158
  stub_put(@api_key, "clients/#{@client.client_id}/setmonthlybilling.json", nil)
153
159
  @client.set_monthly_billing "CAD", true, 150
154
160
  request = FakeWeb.last_request.body
155
- assert_equal("{\"Currency\":\"CAD\",\"ClientPays\":true,\"MarkupPercentage\":150,\"MonthlyScheme\":null}", request, "Request wasn't as expected")
161
+ request.include?("\"Currency\":\"CAD\"").should == true
162
+ request.include?("\"ClientPays\":true").should == true
163
+ request.include?("\"MarkupPercentage\":150").should == true
164
+ request.include?("\"MonthlyScheme\":null").should == true
156
165
  end
157
166
 
158
167
  should "set monthly billing (basic)" do
159
168
  stub_put(@api_key, "clients/#{@client.client_id}/setmonthlybilling.json", nil)
160
169
  @client.set_monthly_billing "CAD", true, 150, "Basic"
161
170
  request = FakeWeb.last_request.body
162
- assert_equal("{\"Currency\":\"CAD\",\"ClientPays\":true,\"MarkupPercentage\":150,\"MonthlyScheme\":\"Basic\"}", request, "Request wasn't as expected")
171
+ request.include?("\"Currency\":\"CAD\"").should == true
172
+ request.include?("\"ClientPays\":true").should == true
173
+ request.include?("\"MarkupPercentage\":150").should == true
174
+ request.include?("\"MonthlyScheme\":\"Basic\"").should == true
163
175
  end
164
176
 
165
177
  should "set monthly billing (unlimited)" do
166
178
  stub_put(@api_key, "clients/#{@client.client_id}/setmonthlybilling.json", nil)
167
179
  @client.set_monthly_billing "CAD", false, 120, "Unlimited"
168
180
  request = FakeWeb.last_request.body
169
- assert_equal("{\"Currency\":\"CAD\",\"ClientPays\":false,\"MarkupPercentage\":120,\"MonthlyScheme\":\"Unlimited\"}", request, "Request wasn't as expected")
181
+ request.include?("\"Currency\":\"CAD\"").should == true
182
+ request.include?("\"ClientPays\":false").should == true
183
+ request.include?("\"MarkupPercentage\":120").should == true
184
+ request.include?("\"MonthlyScheme\":\"Unlimited\"").should == true
170
185
  end
171
186
 
172
187
  should "delete a client" do
@@ -10,6 +10,14 @@
10
10
  "Key": "website",
11
11
  "Value": "http://example.com"
12
12
  },
13
+ {
14
+ "Key": "multi select field",
15
+ "Value": "option one"
16
+ },
17
+ {
18
+ "Key": "multi select field",
19
+ "Value": "option two"
20
+ },
13
21
  {
14
22
  "Key": "age",
15
23
  "Value": "24"
@@ -117,7 +117,13 @@ class ListTest < Test::Unit::TestCase
117
117
  res.Results.first.Name.should =="Person One"
118
118
  res.Results.first.Date.should == "2010-10-25 10:28:00"
119
119
  res.Results.first.State.should == "Active"
120
- res.Results.first.CustomFields.size.should == 3
120
+ res.Results.first.CustomFields.size.should == 5
121
+ res.Results.first.CustomFields[0].Key.should == "website"
122
+ res.Results.first.CustomFields[0].Value.should == "http://example.com"
123
+ res.Results.first.CustomFields[1].Key.should == "multi select field"
124
+ res.Results.first.CustomFields[1].Value.should == "option one"
125
+ res.Results.first.CustomFields[2].Key.should == "multi select field"
126
+ res.Results.first.CustomFields[2].Value.should == "option two"
121
127
  end
122
128
 
123
129
  should "get the unsubscribed subscribers for a list" 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.2.0
4
+ version: 2.3.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-09-17 00:00:00.000000000 Z
12
+ date: 2012-10-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70099797096200 !ruby/object:Gem::Requirement
16
+ requirement: &70321789088920 !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: *70099797096200
24
+ version_requirements: *70321789088920
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: fakeweb
27
- requirement: &70099797095560 !ruby/object:Gem::Requirement
27
+ requirement: &70321789088160 !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: *70099797095560
35
+ version_requirements: *70321789088160
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jnunemaker-matchy
38
- requirement: &70099797094880 !ruby/object:Gem::Requirement
38
+ requirement: &70321789084600 !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: *70099797094880
46
+ version_requirements: *70321789084600
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: mocha
49
- requirement: &70099797094220 !ruby/object:Gem::Requirement
49
+ requirement: &70321789096560 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,21 +54,21 @@ dependencies:
54
54
  version: '0.9'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70099797094220
57
+ version_requirements: *70321789096560
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: shoulda
60
- requirement: &70099797093460 !ruby/object:Gem::Requirement
60
+ requirement: &70321789092060 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
64
64
  - !ruby/object:Gem::Version
65
- version: 3.1.1
65
+ version: 3.3.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70099797093460
68
+ version_requirements: *70321789092060
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: cane
71
- requirement: &70099797093080 !ruby/object:Gem::Requirement
71
+ requirement: &70321789105720 !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: *70099797093080
79
+ version_requirements: *70321789105720
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: json
82
- requirement: &70099797092480 !ruby/object:Gem::Requirement
82
+ requirement: &70321789104280 !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: *70099797092480
90
+ version_requirements: *70321789104280
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: hashie
93
- requirement: &70099797091760 !ruby/object:Gem::Requirement
93
+ requirement: &70321789103040 !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: *70099797091760
101
+ version_requirements: *70321789103040
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: httparty
104
- requirement: &70099797091260 !ruby/object:Gem::Requirement
104
+ requirement: &70321789101200 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,7 +109,7 @@ dependencies:
109
109
  version: '0.8'
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *70099797091260
112
+ version_requirements: *70321789101200
113
113
  description: Implements the complete functionality of the createsend API.
114
114
  email:
115
115
  - jdennes@gmail.com
@@ -212,6 +212,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
212
212
  - - ! '>='
213
213
  - !ruby/object:Gem::Version
214
214
  version: '0'
215
+ segments:
216
+ - 0
217
+ hash: 3175201096736061315
215
218
  required_rubygems_version: !ruby/object:Gem::Requirement
216
219
  none: false
217
220
  requirements: