exactish_target 0.2.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/.rvmrc +1 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +29 -0
- data/LICENSE.txt +20 -0
- data/README.md +29 -0
- data/Rakefile +41 -0
- data/VERSION +1 -0
- data/exactish_target.gemspec +78 -0
- data/lib/exactish_target.rb +83 -0
- data/rdoc/ExactishTarget.html +450 -0
- data/rdoc/created.rid +3 -0
- data/rdoc/index.html +61 -0
- data/rdoc/lib/exactish_target_rb.html +58 -0
- data/rdoc/rdoc.css +706 -0
- data/spec/exact_target_spec.rb +85 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/support/fake_exactish_target/app.rb +128 -0
- metadata +195 -0
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'sham_rack'
|
3
|
+
require 'fake_exactish_target/app'
|
4
|
+
require 'exactish_target'
|
5
|
+
|
6
|
+
describe ExactishTarget do
|
7
|
+
|
8
|
+
def fake_exactish_target
|
9
|
+
@fake_exactish_target ||= FakeExactishTarget::App.new
|
10
|
+
end
|
11
|
+
|
12
|
+
before do
|
13
|
+
ShamRack.mount(fake_exactish_target, "exact-target.com")
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#create_subscriber" do
|
17
|
+
|
18
|
+
it "should not raise an error if the subscription request was successful" do
|
19
|
+
fake_exactish_target.mode = :happy
|
20
|
+
lambda {
|
21
|
+
ExactishTarget.new("username", "password", "http://exact-target.com/Service.asmx").create_subscriber("email", "country", "source")
|
22
|
+
}.should_not raise_error
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should raise an error if the subscription request failed" do
|
26
|
+
fake_exactish_target.mode = :sad
|
27
|
+
lambda {
|
28
|
+
ExactishTarget.new("username", "password", "http://exact-target.com/Service.asmx").create_subscriber("email", "country", "source")
|
29
|
+
}.should raise_error(StandardError, /^Subscription request for email: "email", country: "country", source: "source" failed. Newsletter subscription has not been created.\s+Exception: #<StandardError: Exact Target Error/)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should raise an error if an invalid response is received from ET" do
|
33
|
+
fake_exactish_target.mode = :invalid
|
34
|
+
lambda {
|
35
|
+
ExactishTarget.new("username", "password", "http://exact-target.com/Service.asmx").create_subscriber("email", "country", "source")
|
36
|
+
}.should raise_error(StandardError, /^Subscription request for email: "email", country: "country", source: "source" failed. Newsletter subscription has not been created.\s+Exception: #<StandardError: Invalid response from Exact Target/)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "#create_subscriber_request_xml" do
|
42
|
+
|
43
|
+
before do
|
44
|
+
@client = ExactishTarget.new("the username", "the password", "http://exact-target.com/Service.asmx")
|
45
|
+
@xml = @client.create_subscriber_request_xml("email@gmail.com", "a country", "the source")
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should include the ET credentials" do
|
49
|
+
@xml.should include("<n1:UsernameToken><n1:Username>the username</n1:Username><n1:Password>the password</n1:Password></n1:UsernameToken>")
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should include the subscriber's email address" do
|
53
|
+
@xml.should include("<n2:EmailAddress>email@gmail.com</n2:EmailAddress>")
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should use the subscriber's email address as the customer key" do
|
57
|
+
@xml.should include("<n2:CustomerKey>email@gmail.com</n2:CustomerKey>")
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should include the subscriber's country" do
|
61
|
+
@xml.should include("<n2:Attributes><n2:Name>Country</n2:Name><n2:Value>a country</n2:Value></n2:Attributes>")
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should include the source of the subscription" do
|
65
|
+
@xml.should include("<n2:Attributes><n2:Name>Source</n2:Name><n2:Value>the source</n2:Value></n2:Attributes>")
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should include the Lonely Planet Newsletters flag set to true" do
|
69
|
+
@xml.should include("<n2:Attributes><n2:Name>Lonely Planet Newsletters</n2:Name><n2:Value>true</n2:Value></n2:Attributes>")
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should include the Lonely Planet Marketing flag set to true" do
|
73
|
+
@xml.should include("<n2:Attributes><n2:Name>Lonely Planet Marketing</n2:Name><n2:Value>true</n2:Value></n2:Attributes>")
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should xml-escape field values" do
|
77
|
+
xml = @client.create_subscriber_request_xml("<email@gmail.com>", "a country & something", "the sour&ce")
|
78
|
+
xml.should include("<email@gmail.com>")
|
79
|
+
xml.should include("a country & something")
|
80
|
+
xml.should include("sour&ce")
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'sinatra/base'
|
3
|
+
require 'builder'
|
4
|
+
|
5
|
+
module FakeExactishTarget
|
6
|
+
|
7
|
+
class App < Sinatra::Base
|
8
|
+
|
9
|
+
attr_accessor :mode
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@mode = :happy
|
13
|
+
end
|
14
|
+
|
15
|
+
post '/Service.asmx' do
|
16
|
+
send("#{mode}_response")
|
17
|
+
end
|
18
|
+
|
19
|
+
def happy_response
|
20
|
+
<<-XML.strip
|
21
|
+
<?xml version="1.0" encoding="utf-8"?>
|
22
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
23
|
+
<soap:Header>
|
24
|
+
<wsa:Action>CreateResponse</wsa:Action>
|
25
|
+
<wsa:MessageID>urn:uuid:d97e2a9a-48a7-4f38-b2c5-7c30c0abf37c</wsa:MessageID>
|
26
|
+
<wsa:RelatesTo>urn:uuid:259526f3-cfea-4628-8bce-f49714556f45</wsa:RelatesTo>
|
27
|
+
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
|
28
|
+
<wsse:Security>
|
29
|
+
<wsu:Timestamp wsu:Id="Timestamp-507733bc-b23a-454d-837b-c173836d26e9">
|
30
|
+
<wsu:Created>2011-02-22T00:32:45Z</wsu:Created>
|
31
|
+
<wsu:Expires>2011-02-22T00:37:45Z</wsu:Expires>
|
32
|
+
</wsu:Timestamp>
|
33
|
+
</wsse:Security>
|
34
|
+
</soap:Header>
|
35
|
+
<soap:Body>
|
36
|
+
<CreateResponse xmlns="http://exacttarget.com/wsdl/partnerAPI">
|
37
|
+
<Results>
|
38
|
+
<StatusCode>OK</StatusCode>
|
39
|
+
<StatusMessage>Created Subscriber.</StatusMessage>
|
40
|
+
<OrdinalID>0</OrdinalID>
|
41
|
+
<NewID>921310</NewID>
|
42
|
+
<Object xsi:type="Subscriber">
|
43
|
+
<PartnerKey xsi:nil="true"/>
|
44
|
+
<ID>921310</ID>
|
45
|
+
<ObjectID xsi:nil="true"/>
|
46
|
+
<CustomerKey>api-test-13@bh.exacttarget.com</CustomerKey>
|
47
|
+
<EmailAddress>api-test-13@bh.exacttarget.com</EmailAddress>
|
48
|
+
<Attributes>
|
49
|
+
<Name>Country</Name>
|
50
|
+
<Value>Australia</Value>
|
51
|
+
</Attributes>
|
52
|
+
<Attributes>
|
53
|
+
<Name>Source</Name>
|
54
|
+
<Value>Over the rainbow</Value>
|
55
|
+
</Attributes>
|
56
|
+
</Object>
|
57
|
+
</Results>
|
58
|
+
<RequestID>dd6710a8-5d74-48fb-a8db-c10622860a68</RequestID>
|
59
|
+
<OverallStatus>OK</OverallStatus>
|
60
|
+
</CreateResponse>
|
61
|
+
</soap:Body>
|
62
|
+
</soap:Envelope>
|
63
|
+
XML
|
64
|
+
end
|
65
|
+
|
66
|
+
def sad_response
|
67
|
+
<<-XML.strip
|
68
|
+
<?xml version="1.0" encoding="utf-8"?>
|
69
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
70
|
+
<soap:Header>
|
71
|
+
<wsa:Action>CreateResponse</wsa:Action>
|
72
|
+
<wsa:MessageID>urn:uuid:5ebdc5c1-dc28-499e-85d6-76a45eb33fc5</wsa:MessageID>
|
73
|
+
<wsa:RelatesTo>urn:uuid:59f069b9-293a-41cd-a836-fd46a6f95343</wsa:RelatesTo>
|
74
|
+
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
|
75
|
+
<wsse:Security>
|
76
|
+
<wsu:Timestamp wsu:Id="Timestamp-d0da59eb-829d-46d9-a45c-bd5e062be276">
|
77
|
+
<wsu:Created>2011-02-22T00:37:18Z</wsu:Created>
|
78
|
+
<wsu:Expires>2011-02-22T00:42:18Z</wsu:Expires>
|
79
|
+
</wsu:Timestamp>
|
80
|
+
</wsse:Security>
|
81
|
+
</soap:Header>
|
82
|
+
<soap:Body>
|
83
|
+
<CreateResponse xmlns="http://exacttarget.com/wsdl/partnerAPI">
|
84
|
+
<Results>
|
85
|
+
<StatusCode>Error</StatusCode>
|
86
|
+
<StatusMessage>The subscriber is already on the list</StatusMessage>
|
87
|
+
<OrdinalID>0</OrdinalID>
|
88
|
+
<ErrorCode>12014</ErrorCode>
|
89
|
+
<NewID>0</NewID>
|
90
|
+
<Object xsi:type="Subscriber">
|
91
|
+
<PartnerKey xsi:nil="true"/>
|
92
|
+
<ObjectID xsi:nil="true"/>
|
93
|
+
<CustomerKey>api-test-13@bh.exacttarget.com</CustomerKey>
|
94
|
+
<EmailAddress>api-test-13@bh.exacttarget.com</EmailAddress>
|
95
|
+
<Attributes>
|
96
|
+
<Name>Country</Name>
|
97
|
+
<Value>Australia</Value>
|
98
|
+
</Attributes>
|
99
|
+
<Attributes>
|
100
|
+
<Name>Source</Name>
|
101
|
+
<Value>Over the rainbow</Value>
|
102
|
+
</Attributes>
|
103
|
+
</Object>
|
104
|
+
</Results>
|
105
|
+
<RequestID>beb6f073-5a3a-4a09-a167-7410e2957b14</RequestID>
|
106
|
+
<OverallStatus>Error</OverallStatus>
|
107
|
+
</CreateResponse>
|
108
|
+
</soap:Body>
|
109
|
+
</soap:Envelope>
|
110
|
+
XML
|
111
|
+
end
|
112
|
+
|
113
|
+
def invalid_response
|
114
|
+
<<-XML.strip
|
115
|
+
<?xml version="1.0" encoding="utf-8"?>
|
116
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
|
117
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
118
|
+
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
119
|
+
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
|
120
|
+
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
|
121
|
+
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
122
|
+
</soap:Envelope>
|
123
|
+
XML
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
metadata
ADDED
@@ -0,0 +1,195 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: exactish_target
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
- 2
|
10
|
+
version: 0.2.2
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Lonely Planet
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-07-12 00:00:00 +10:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
type: :runtime
|
23
|
+
name: builder
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - "="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
hash: 7
|
31
|
+
segments:
|
32
|
+
- 3
|
33
|
+
- 0
|
34
|
+
- 0
|
35
|
+
version: 3.0.0
|
36
|
+
requirement: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
type: :development
|
39
|
+
name: shoulda
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
hash: 3
|
47
|
+
segments:
|
48
|
+
- 0
|
49
|
+
version: "0"
|
50
|
+
requirement: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
type: :development
|
53
|
+
name: rspec
|
54
|
+
prerelease: false
|
55
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 27
|
61
|
+
segments:
|
62
|
+
- 1
|
63
|
+
- 3
|
64
|
+
- 0
|
65
|
+
version: 1.3.0
|
66
|
+
requirement: *id003
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
type: :development
|
69
|
+
name: rr
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
hash: 33
|
77
|
+
segments:
|
78
|
+
- 0
|
79
|
+
- 10
|
80
|
+
- 11
|
81
|
+
version: 0.10.11
|
82
|
+
requirement: *id004
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
type: :development
|
85
|
+
name: sham_rack
|
86
|
+
prerelease: false
|
87
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 27
|
93
|
+
segments:
|
94
|
+
- 1
|
95
|
+
- 3
|
96
|
+
- 0
|
97
|
+
version: 1.3.0
|
98
|
+
requirement: *id005
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
type: :development
|
101
|
+
name: sinatra
|
102
|
+
prerelease: false
|
103
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
hash: 51
|
109
|
+
segments:
|
110
|
+
- 0
|
111
|
+
- 9
|
112
|
+
- 4
|
113
|
+
version: 0.9.4
|
114
|
+
requirement: *id006
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
type: :development
|
117
|
+
name: jeweler
|
118
|
+
prerelease: false
|
119
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
120
|
+
none: false
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
hash: 7
|
125
|
+
segments:
|
126
|
+
- 1
|
127
|
+
- 5
|
128
|
+
- 2
|
129
|
+
version: 1.5.2
|
130
|
+
requirement: *id007
|
131
|
+
description: Very simple Exact Target SOAP client. Only supports subscriber creation at this point
|
132
|
+
email: daniel.vydra@lonelyplanet.com.au
|
133
|
+
executables: []
|
134
|
+
|
135
|
+
extensions: []
|
136
|
+
|
137
|
+
extra_rdoc_files:
|
138
|
+
- LICENSE.txt
|
139
|
+
- README.md
|
140
|
+
files:
|
141
|
+
- .rvmrc
|
142
|
+
- Gemfile
|
143
|
+
- Gemfile.lock
|
144
|
+
- LICENSE.txt
|
145
|
+
- README.md
|
146
|
+
- Rakefile
|
147
|
+
- VERSION
|
148
|
+
- exactish_target.gemspec
|
149
|
+
- lib/exactish_target.rb
|
150
|
+
- rdoc/ExactishTarget.html
|
151
|
+
- rdoc/created.rid
|
152
|
+
- rdoc/index.html
|
153
|
+
- rdoc/lib/exactish_target_rb.html
|
154
|
+
- rdoc/rdoc.css
|
155
|
+
- spec/exact_target_spec.rb
|
156
|
+
- spec/spec_helper.rb
|
157
|
+
- spec/support/fake_exactish_target/app.rb
|
158
|
+
has_rdoc: true
|
159
|
+
homepage: https://github.com/lonelyplanet/exactish_target
|
160
|
+
licenses: []
|
161
|
+
|
162
|
+
post_install_message:
|
163
|
+
rdoc_options: []
|
164
|
+
|
165
|
+
require_paths:
|
166
|
+
- lib
|
167
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
168
|
+
none: false
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
hash: 3
|
173
|
+
segments:
|
174
|
+
- 0
|
175
|
+
version: "0"
|
176
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ">="
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
hash: 3
|
182
|
+
segments:
|
183
|
+
- 0
|
184
|
+
version: "0"
|
185
|
+
requirements: []
|
186
|
+
|
187
|
+
rubyforge_project:
|
188
|
+
rubygems_version: 1.4.2
|
189
|
+
signing_key:
|
190
|
+
specification_version: 3
|
191
|
+
summary: Exact Target client
|
192
|
+
test_files:
|
193
|
+
- spec/exact_target_spec.rb
|
194
|
+
- spec/spec_helper.rb
|
195
|
+
- spec/support/fake_exactish_target/app.rb
|