createsend 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: