exact-target 0.0.4 → 0.0.5
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/CHANGELOG +1 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +20 -0
- data/Manifest +6 -2
- data/README.rdoc +1 -1
- data/Rakefile +0 -8
- data/exact-target.gemspec +12 -15
- data/lib/exact-target.rb +1 -0
- data/lib/exact_target/configuration.rb +4 -1
- data/lib/exact_target/request_builder.rb +1 -2
- data/lib/exact_target/response_classes.rb +2 -2
- data/lib/exact_target/response_handler.rb +5 -5
- data/lib/exact_target.rb +10 -1
- data/lib/exacttarget.rb +1 -0
- data/spec/exact_target/net_https_hack_spec.rb +2 -0
- data/spec/exact_target/response_handler_spec.rb +17 -0
- data/spec/exact_target/string_ext_spec.rb +2 -0
- data/spec/exact_target_spec.rb +25 -4
- data/spec/spec_helper.rb +15 -0
- metadata +13 -17
- data/spec/subscriber_list_spec.rb +0 -290
data/CHANGELOG
CHANGED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
builder (3.0.0)
|
5
|
+
nokogiri (1.4.4)
|
6
|
+
rspec (1.3.1)
|
7
|
+
simplecov (0.4.2)
|
8
|
+
simplecov-html (~> 0.4.4)
|
9
|
+
simplecov-html (0.4.4)
|
10
|
+
simplecov-rcov (0.2.0)
|
11
|
+
|
12
|
+
PLATFORMS
|
13
|
+
ruby
|
14
|
+
|
15
|
+
DEPENDENCIES
|
16
|
+
builder (>= 3.0.0)
|
17
|
+
nokogiri (>= 1.4.4)
|
18
|
+
rspec (= 1.3.1)
|
19
|
+
simplecov (>= 0.4.0)
|
20
|
+
simplecov-rcov (>= 0.2.0)
|
data/Manifest
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
CHANGELOG
|
2
|
+
Gemfile
|
3
|
+
Gemfile.lock
|
2
4
|
LICENSE
|
5
|
+
Manifest
|
3
6
|
README.rdoc
|
4
7
|
Rakefile
|
8
|
+
lib/exact-target.rb
|
5
9
|
lib/exact_target.rb
|
6
10
|
lib/exact_target/builder_ext.rb
|
7
11
|
lib/exact_target/configuration.rb
|
@@ -12,11 +16,11 @@ lib/exact_target/response_class.erb
|
|
12
16
|
lib/exact_target/response_classes.rb
|
13
17
|
lib/exact_target/response_handler.rb
|
14
18
|
lib/exact_target/string_ext.rb
|
19
|
+
lib/exacttarget.rb
|
15
20
|
spec/exact_target/net_https_hack_spec.rb
|
16
21
|
spec/exact_target/response_handler_spec.rb
|
17
22
|
spec/exact_target/string_ext_spec.rb
|
18
23
|
spec/exact_target_data.yml
|
19
24
|
spec/exact_target_spec.rb
|
20
25
|
spec/spec.opts
|
21
|
-
spec/
|
22
|
-
Manifest
|
26
|
+
spec/spec_helper.rb
|
data/README.rdoc
CHANGED
@@ -20,7 +20,7 @@ http://github.com/ePublishing/exact_target
|
|
20
20
|
== Prerequisites
|
21
21
|
|
22
22
|
The ExactTarget gem depends on both Nokogiri and Builder. Both
|
23
|
-
should be installed automatically when
|
23
|
+
should be installed automatically when the gem is installed
|
24
24
|
(if not already installed).
|
25
25
|
|
26
26
|
== Notes
|
data/Rakefile
CHANGED
@@ -19,14 +19,6 @@ For more information consule http://www.exacttarget.com/.
|
|
19
19
|
DONE
|
20
20
|
end
|
21
21
|
|
22
|
-
desc "Run all specs"
|
23
|
-
Spec::Rake::SpecTask.new('spec') do |t|
|
24
|
-
t.spec_opts = ['--options', %q("spec/spec.opts")]
|
25
|
-
t.spec_files = FileList['spec/**/*_spec.rb']
|
26
|
-
t.rcov = true
|
27
|
-
t.rcov_opts = ['--exclude', 'spec']
|
28
|
-
end
|
29
|
-
|
30
22
|
desc 'generate API documentation to doc/rdocs/index.html'
|
31
23
|
Rake::RDocTask.new do |rd|
|
32
24
|
rd.rdoc_dir = 'doc/rdocs'
|
data/exact-target.gemspec
CHANGED
@@ -1,30 +1,27 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
|
-
s.name =
|
5
|
-
s.version = "0.0.
|
4
|
+
s.name = "exact-target"
|
5
|
+
s.version = "0.0.5"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["David McCullars"]
|
9
|
-
s.date =
|
10
|
-
s.description =
|
11
|
-
|
12
|
-
|
13
|
-
s.
|
14
|
-
s.
|
15
|
-
s.files = ["CHANGELOG", "LICENSE", "README.rdoc", "Rakefile", "lib/exact_target.rb", "lib/exact_target/builder_ext.rb", "lib/exact_target/configuration.rb", "lib/exact_target/error.rb", "lib/exact_target/net_https_hack.rb", "lib/exact_target/request_builder.rb", "lib/exact_target/response_class.erb", "lib/exact_target/response_classes.rb", "lib/exact_target/response_handler.rb", "lib/exact_target/string_ext.rb", "spec/exact_target/net_https_hack_spec.rb", "spec/exact_target/response_handler_spec.rb", "spec/exact_target/string_ext_spec.rb", "spec/exact_target_data.yml", "spec/exact_target_spec.rb", "spec/spec.opts", "spec/subscriber_list_spec.rb", "Manifest", "exact-target.gemspec"]
|
16
|
-
s.homepage = %q{http://github.com/ePublishing/exact_target}
|
9
|
+
s.date = "2011-10-25"
|
10
|
+
s.description = "This is a pure-ruby implementation of the ExactTarget api.\nFor more information consule http://www.exacttarget.com/.\n"
|
11
|
+
s.email = "dmccullars@ePublishing.com"
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.rdoc", "lib/exact-target.rb"]
|
13
|
+
s.files = ["CHANGELOG", "Gemfile", "Gemfile.lock", "LICENSE", "Manifest", "README.rdoc", "Rakefile", "lib/exact-target.rb", "lib/exact_target.rb", "lib/exact_target/builder_ext.rb", "lib/exact_target/configuration.rb", "lib/exact_target/error.rb", "lib/exact_target/net_https_hack.rb", "lib/exact_target/request_builder.rb", "lib/exact_target/response_class.erb", "lib/exact_target/response_classes.rb", "lib/exact_target/response_handler.rb", "lib/exact_target/string_ext.rb", "lib/exacttarget.rb", "spec/exact_target/net_https_hack_spec.rb", "spec/exact_target/response_handler_spec.rb", "spec/exact_target/string_ext_spec.rb", "spec/exact_target_data.yml", "spec/exact_target_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "exact-target.gemspec"]
|
14
|
+
s.homepage = "http://github.com/ePublishing/exact_target"
|
17
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Exact-target", "--main", "README.rdoc"]
|
18
16
|
s.require_paths = ["lib"]
|
19
|
-
s.rubyforge_project =
|
20
|
-
s.rubygems_version =
|
21
|
-
s.summary =
|
17
|
+
s.rubyforge_project = "exact-target"
|
18
|
+
s.rubygems_version = "1.8.10"
|
19
|
+
s.summary = "This is a pure-ruby implementation of the ExactTarget api. For more information consule http://www.exacttarget.com/."
|
22
20
|
|
23
21
|
if s.respond_to? :specification_version then
|
24
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
22
|
s.specification_version = 3
|
26
23
|
|
27
|
-
if Gem::Version.new(Gem::
|
24
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
28
25
|
else
|
29
26
|
end
|
30
27
|
else
|
data/lib/exact-target.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'exact_target'
|
@@ -3,7 +3,7 @@ module ExactTarget
|
|
3
3
|
class Configuration
|
4
4
|
|
5
5
|
OPTIONS = [:base_url, :username, :password,
|
6
|
-
:http_open_timeout, :http_read_timeout].freeze
|
6
|
+
:http_open_timeout, :http_read_timeout, :http_proxy].freeze
|
7
7
|
|
8
8
|
# The (optional) base URL for accessing ExactTarget (can be http or https).
|
9
9
|
# Defaults to 'https://api.dc1.exacttarget.com/integrate.aspx'
|
@@ -24,6 +24,9 @@ module ExactTarget
|
|
24
24
|
# The (optional) HTTP read timeout in seconds (defaults to 5).
|
25
25
|
attr_accessor :http_read_timeout
|
26
26
|
|
27
|
+
# The (optional) HTTP proxy url
|
28
|
+
attr_accessor :http_proxy
|
29
|
+
|
27
30
|
def initialize
|
28
31
|
@base_url = 'https://api.dc1.exacttarget.com/integrate.aspx'
|
29
32
|
@http_open_timeout = 2
|
@@ -241,7 +241,6 @@ module ExactTarget
|
|
241
241
|
def build(system_name, action, search_type=nil, search_value=nil, options=nil, &block)
|
242
242
|
options = parse_options(search_type, search_value, options)
|
243
243
|
xml = Builder::XmlMarkup.new
|
244
|
-
xml.instruct! :xml, :version => "1.0", :encoding => nil
|
245
244
|
xml = xml.exacttarget do |et|
|
246
245
|
et.authorization do |a|
|
247
246
|
a.username @config.username
|
@@ -251,7 +250,7 @@ module ExactTarget
|
|
251
250
|
build_system(s, system_name, action, options, &block)
|
252
251
|
end
|
253
252
|
end
|
254
|
-
xml.
|
253
|
+
%Q[<?xml version="1.0"?>#{xml}]
|
255
254
|
end
|
256
255
|
|
257
256
|
def parse_options(search_type, search_value, options)
|
@@ -30,7 +30,7 @@ module ExactTarget
|
|
30
30
|
|
31
31
|
def base.subscriber_class
|
32
32
|
@subscriber_class ||= ResponseClasses.class_from_et_attributes(
|
33
|
-
self, :Subscriber, accountinfo_retrieve_attrbs.map(&:name)
|
33
|
+
self, :Subscriber, accountinfo_retrieve_attrbs.map(&:name), :Status
|
34
34
|
)
|
35
35
|
end
|
36
36
|
|
@@ -44,7 +44,7 @@ module ExactTarget
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def class_from_et_attributes(base, name, *attribute_names)
|
47
|
-
attributes = attribute_names.flatten.map do |a|
|
47
|
+
attributes = attribute_names.flatten.uniq.map do |a|
|
48
48
|
[a.to_s.underscore.gsub(' ', '_'), a.to_s.gsub(' ', '__')]
|
49
49
|
end
|
50
50
|
class_def = class_template.result(binding)
|
@@ -54,7 +54,7 @@ module ExactTarget
|
|
54
54
|
def list_retrieve_sub(resp)
|
55
55
|
resp.xpath('//subscriber').map do |s|
|
56
56
|
return [] if s.text =~ /no subscribers found/i
|
57
|
-
create_result(Subscriber, s)
|
57
|
+
create_result(ExactTarget::Subscriber, s)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
@@ -84,7 +84,7 @@ module ExactTarget
|
|
84
84
|
resp.xpath('//subscriber').map do |s|
|
85
85
|
return [] if s.text =~ /no subscribers found/i
|
86
86
|
sri = create_result(SubscriberInformation, s)
|
87
|
-
sri.subscriber = create_result(Subscriber, s)
|
87
|
+
sri.subscriber = create_result(ExactTarget::Subscriber, s)
|
88
88
|
sri
|
89
89
|
end
|
90
90
|
end
|
@@ -150,14 +150,14 @@ module ExactTarget
|
|
150
150
|
case v
|
151
151
|
when /^[+-]?\d+$/
|
152
152
|
v.to_i
|
153
|
-
when /^([+-]?)
|
153
|
+
when /^([+-]?)\d+(\.\d*)?([Ee]([+-]?\d+))?$/
|
154
154
|
v.to_f
|
155
155
|
when /^true$/i
|
156
156
|
true
|
157
157
|
when /^false$/i
|
158
158
|
false
|
159
|
-
when %r
|
160
|
-
|
159
|
+
when %r<^\d\d?/\d\d?/\d{4}>
|
160
|
+
Date.strptime(v, "%m/%d/%Y")
|
161
161
|
else
|
162
162
|
v.strip
|
163
163
|
end
|
data/lib/exact_target.rb
CHANGED
@@ -72,7 +72,7 @@ module ExactTarget
|
|
72
72
|
def send_to_exact_target(request)
|
73
73
|
verify_configure
|
74
74
|
uri = URI.parse "#{configuration.base_url}?qf=xml&xml=#{URI.escape request}"
|
75
|
-
http =
|
75
|
+
http = net_http_or_proxy.new(uri.host, uri.port)
|
76
76
|
http.use_ssl = configuration.secure?
|
77
77
|
http.open_timeout = configuration.http_open_timeout
|
78
78
|
http.read_timeout = configuration.http_read_timeout
|
@@ -93,6 +93,15 @@ module ExactTarget
|
|
93
93
|
|
94
94
|
private
|
95
95
|
|
96
|
+
def net_http_or_proxy
|
97
|
+
if configuration.http_proxy
|
98
|
+
proxy_uri = URI.parse(configuration.http_proxy)
|
99
|
+
Net::HTTP.Proxy(proxy_uri.host, proxy_uri.port)
|
100
|
+
else
|
101
|
+
Net::HTTP
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
96
105
|
def parse_response_xml(xml)
|
97
106
|
verify_configure
|
98
107
|
resp = Nokogiri.parse(xml)
|
data/lib/exacttarget.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'exact_target'
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
1
3
|
describe ExactTarget::ResponseHandler do
|
2
4
|
|
3
5
|
before(:all) do
|
@@ -12,4 +14,19 @@ describe ExactTarget::ResponseHandler do
|
|
12
14
|
}.should raise_error(ExactTarget::Error, 'ExactTarget error #0: Unsupported id result: BOGUS<s>')
|
13
15
|
end
|
14
16
|
|
17
|
+
context :cast_value do
|
18
|
+
['3', 3,
|
19
|
+
'-5', -5,
|
20
|
+
'+3.79e-4', 0.000379,
|
21
|
+
'true', true,
|
22
|
+
'false', false,
|
23
|
+
'3/15/2002', Date.parse('2002-03-15'),
|
24
|
+
"\t a b \n", "a b",
|
25
|
+
].each_slice(2) do |v, res|
|
26
|
+
it "should handle #{v}" do
|
27
|
+
@handler.send(:cast_value, v).should == res
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
15
32
|
end
|
data/spec/exact_target_spec.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require 'exact_target'
|
3
|
-
require 'yaml'
|
1
|
+
require 'spec_helper'
|
4
2
|
|
5
3
|
describe ExactTarget do
|
6
4
|
|
@@ -91,7 +89,7 @@ describe ExactTarget do
|
|
91
89
|
@res.unsub_count.should == 1596
|
92
90
|
@res.subscriber_count.should == 15287
|
93
91
|
@res.bounce_count.should == 4145
|
94
|
-
@res.modified.should be_a(
|
92
|
+
@res.modified.should be_a(Date)
|
95
93
|
@res.held_count.should == 120
|
96
94
|
@res.list_type.should == 'Private'
|
97
95
|
@res.active_total.should == 9426
|
@@ -117,6 +115,12 @@ describe ExactTarget do
|
|
117
115
|
@res.should == 'Complete'
|
118
116
|
end
|
119
117
|
|
118
|
+
specify "list_retrieve_sub with bogus status" do
|
119
|
+
expect do
|
120
|
+
ExactTarget.list_retrieve_sub(42, :bogus)
|
121
|
+
end.should raise_error(/Invalid status:/)
|
122
|
+
end
|
123
|
+
|
120
124
|
test_et :list_retrieve_sub, 42, 'Active' do
|
121
125
|
@res.size.should == 2
|
122
126
|
|
@@ -330,6 +334,23 @@ describe ExactTarget do
|
|
330
334
|
expect { ExactTarget.bogus }.should raise_error
|
331
335
|
end
|
332
336
|
|
337
|
+
context :net_http_or_proxy do
|
338
|
+
after { ExactTarget.configuration.http_proxy = nil }
|
339
|
+
|
340
|
+
specify :proxy do
|
341
|
+
ExactTarget.configuration.http_proxy = 'http://a.proxy.com:9001'
|
342
|
+
clazz = ExactTarget.send(:net_http_or_proxy)
|
343
|
+
# A proxy class should have the same methods
|
344
|
+
clazz.should_not == Net::HTTP
|
345
|
+
(Net::HTTP.methods - clazz.methods).should be_empty
|
346
|
+
(Net::HTTP.instance_methods - clazz.instance_methods).should be_empty
|
347
|
+
end
|
348
|
+
|
349
|
+
specify :standard do
|
350
|
+
ExactTarget.send(:net_http_or_proxy).should == Net::HTTP
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
333
354
|
#################################################################
|
334
355
|
|
335
356
|
private
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
unless RUBY_VERSION.to_f < 1.9
|
4
|
+
require 'simplecov'
|
5
|
+
begin
|
6
|
+
require 'simplecov-rcov' # Formats in rcov format (so jenkins can consume)
|
7
|
+
SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
|
8
|
+
rescue Exception => e
|
9
|
+
# Ignore if it isn't installed
|
10
|
+
end
|
11
|
+
SimpleCov.start
|
12
|
+
end
|
13
|
+
|
14
|
+
require 'exact_target'
|
15
|
+
require 'yaml'
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exact-target
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 4
|
9
|
-
version: 0.0.4
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.5
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- David McCullars
|
@@ -14,8 +10,7 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date: 2011-
|
18
|
-
default_executable:
|
13
|
+
date: 2011-10-25 00:00:00 Z
|
19
14
|
dependencies: []
|
20
15
|
|
21
16
|
description: |
|
@@ -31,11 +26,16 @@ extra_rdoc_files:
|
|
31
26
|
- CHANGELOG
|
32
27
|
- LICENSE
|
33
28
|
- README.rdoc
|
29
|
+
- lib/exact-target.rb
|
34
30
|
files:
|
35
31
|
- CHANGELOG
|
32
|
+
- Gemfile
|
33
|
+
- Gemfile.lock
|
36
34
|
- LICENSE
|
35
|
+
- Manifest
|
37
36
|
- README.rdoc
|
38
37
|
- Rakefile
|
38
|
+
- lib/exact-target.rb
|
39
39
|
- lib/exact_target.rb
|
40
40
|
- lib/exact_target/builder_ext.rb
|
41
41
|
- lib/exact_target/configuration.rb
|
@@ -46,16 +46,15 @@ files:
|
|
46
46
|
- lib/exact_target/response_classes.rb
|
47
47
|
- lib/exact_target/response_handler.rb
|
48
48
|
- lib/exact_target/string_ext.rb
|
49
|
+
- lib/exacttarget.rb
|
49
50
|
- spec/exact_target/net_https_hack_spec.rb
|
50
51
|
- spec/exact_target/response_handler_spec.rb
|
51
52
|
- spec/exact_target/string_ext_spec.rb
|
52
53
|
- spec/exact_target_data.yml
|
53
54
|
- spec/exact_target_spec.rb
|
54
55
|
- spec/spec.opts
|
55
|
-
- spec/
|
56
|
-
- Manifest
|
56
|
+
- spec/spec_helper.rb
|
57
57
|
- exact-target.gemspec
|
58
|
-
has_rdoc: true
|
59
58
|
homepage: http://github.com/ePublishing/exact_target
|
60
59
|
licenses: []
|
61
60
|
|
@@ -70,24 +69,21 @@ rdoc_options:
|
|
70
69
|
require_paths:
|
71
70
|
- lib
|
72
71
|
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
73
|
requirements:
|
74
74
|
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
segments:
|
77
|
-
- 0
|
78
76
|
version: "0"
|
79
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
80
79
|
requirements:
|
81
80
|
- - ">="
|
82
81
|
- !ruby/object:Gem::Version
|
83
|
-
segments:
|
84
|
-
- 1
|
85
|
-
- 2
|
86
82
|
version: "1.2"
|
87
83
|
requirements: []
|
88
84
|
|
89
85
|
rubyforge_project: exact-target
|
90
|
-
rubygems_version: 1.
|
86
|
+
rubygems_version: 1.8.10
|
91
87
|
signing_key:
|
92
88
|
specification_version: 3
|
93
89
|
summary: This is a pure-ruby implementation of the ExactTarget api. For more information consule http://www.exacttarget.com/.
|
@@ -1,290 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
require 'exact_target'
|
3
|
-
require 'yaml'
|
4
|
-
|
5
|
-
describe ExactTarget::SubscriberList do
|
6
|
-
|
7
|
-
@example_subscriber = Proc.new do
|
8
|
-
ExactTarget::Subscriber.new.tap do |sub|
|
9
|
-
sub.email_address = 'someone@somehwere.com'
|
10
|
-
sub.status = 'active'
|
11
|
-
sub.email_type = 'HTML'
|
12
|
-
sub.first_name = 'Some'
|
13
|
-
sub.last_name = 'One'
|
14
|
-
sub.title = 'Director of HR'
|
15
|
-
sub.region = 'Midwest'
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
ExactTarget::SubscriberList.find_ids('epub test').should == [42, 47]
|
20
|
-
|
21
|
-
ExactTarget::SubscriberList.find(:all, 'epub test').should == [@example_subscriber_list_42, @example_subscriber_list_47]
|
22
|
-
ExactTarget::SubscriberList.find(:first, 'epub test').should == @example_subscriber_list_42
|
23
|
-
ExactTarget::SubscriberList.find(:last, 'epub test').should == @example_subscriber_list_47
|
24
|
-
|
25
|
-
ExactTarget::SubscriberList.find(42).should == @example_subscriber_list_42
|
26
|
-
|
27
|
-
ExactTarget::SubscriberList.new('Epub Test').tap { |li| li.save.should_not raise_error }.id.should == 53
|
28
|
-
|
29
|
-
@example_subscriber_list_42.tap { |li| li.name = 'Epub Test - RENAME' }.save.should be_true
|
30
|
-
|
31
|
-
ExactTarget::SubscriberList.import_all([72, 33, 99], 'sometestfile.txt', %w(some_field other_field), :email_address => 'confirm_result@nowhere.com').should == 841
|
32
|
-
|
33
|
-
@example_subscriber_list_42.import('sometestfile.txt', %w(some_field other_field), :email_address => 'confirm_result@nowhere.com').should == 841
|
34
|
-
|
35
|
-
ExactTarget::SubscriberList.import_status(119792).should == 'Complete'
|
36
|
-
|
37
|
-
@example_subscriber_list_42.subscribers(:status => 'Active').should == [@example_subscriber_94, @example_subscriber_99]
|
38
|
-
|
39
|
-
@example_subscriber_list_42.delete.should_not raise_error
|
40
|
-
|
41
|
-
@example_subscriber_
|
42
|
-
|
43
|
-
test_et :list_retrievegroups do
|
44
|
-
@res.size.should == 2
|
45
|
-
|
46
|
-
@res = @res.last
|
47
|
-
@res.should be_a(ExactTarget::ListGroupInformation)
|
48
|
-
@res.group_id.should == 875
|
49
|
-
@res.parentlist_id.should == 77
|
50
|
-
@res.description.should == "test desc"
|
51
|
-
@res.group_name.should == "test group"
|
52
|
-
@res.to_s.should == "test group"
|
53
|
-
end
|
54
|
-
|
55
|
-
test_et :list_refresh_group, 3514 do
|
56
|
-
@res.should == 6127
|
57
|
-
end
|
58
|
-
|
59
|
-
test_et :batch_inquire, 8912 do
|
60
|
-
@res.should == 'Completed'
|
61
|
-
end
|
62
|
-
|
63
|
-
#################################################################
|
64
|
-
|
65
|
-
test_et :subscriber_add, 1234, @example_subscriber, :status => 'active', :ChannelMemberID => 5678 do
|
66
|
-
@res.should == 12334566
|
67
|
-
end
|
68
|
-
|
69
|
-
test_et :subscriber_edit, 63718, 'user@email.com', @example_subscriber,
|
70
|
-
:status => 'unsub',
|
71
|
-
:reason => 'insert your unsubscribe reason here',
|
72
|
-
:ChannelMemberID => 5678 do
|
73
|
-
@res.should == 12334566
|
74
|
-
end
|
75
|
-
|
76
|
-
test_et :subscriber_retrieve, 123456, 'someone@example.com' do
|
77
|
-
@res.size.should == 1
|
78
|
-
|
79
|
-
@res = @res.last
|
80
|
-
@res.should be_a(ExactTarget::SubscriberInformation)
|
81
|
-
@res.subid.should == 125704849
|
82
|
-
@res.listid.should == 63718
|
83
|
-
@res.list_name.should == 'Newsletter List'
|
84
|
-
|
85
|
-
@res = @res.subscriber
|
86
|
-
@res.email_address.should == "jdoe@example.com"
|
87
|
-
@res.first_name.should == "John"
|
88
|
-
@res.region.should == ""
|
89
|
-
@res.email_type.should == "HTML"
|
90
|
-
@res.title.should == ""
|
91
|
-
@res.status.should == "Active"
|
92
|
-
@res.last_name.should == "Doe"
|
93
|
-
end
|
94
|
-
|
95
|
-
test_et :subscriber_retrieve, 123456789 do
|
96
|
-
@res.size.should == 2
|
97
|
-
|
98
|
-
@res = @res.last
|
99
|
-
@res.should be_a(ExactTarget::SubscriberInformation)
|
100
|
-
@res.subid.should == 125504849
|
101
|
-
@res.listid.should == 63719
|
102
|
-
@res.list_name.should == 'TechnologyUpdate'
|
103
|
-
|
104
|
-
@res = @res.subscriber
|
105
|
-
@res.email_address.should == "jdoe@example.com"
|
106
|
-
@res.first_name.should == "John"
|
107
|
-
@res.region.should == ""
|
108
|
-
@res.email_type.should == "HTML"
|
109
|
-
@res.title.should == ""
|
110
|
-
@res.status.should == "Active"
|
111
|
-
@res.last_name.should == "Doe"
|
112
|
-
end
|
113
|
-
|
114
|
-
test_et :subscriber_delete, 112233445566, 'bob@hotmail.com' do
|
115
|
-
@res.should be_true
|
116
|
-
end
|
117
|
-
|
118
|
-
test_et :subscriber_delete, 112233445566 do
|
119
|
-
@res.should be_true
|
120
|
-
end
|
121
|
-
|
122
|
-
test_et :subscriber_masterunsub,
|
123
|
-
%w(Email1@example.com Email2@example.com Email3@example.com) do
|
124
|
-
@res.size.should == 3
|
125
|
-
(1..3).each do |i|
|
126
|
-
@res["Email#{i}@example.com"].should == "masterunsub"
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
#################################################################
|
131
|
-
|
132
|
-
test_et :email_retrieve do
|
133
|
-
verify_email_retrieve
|
134
|
-
end
|
135
|
-
|
136
|
-
test_et :email_retrieve, 'Welcome to Fortune One!' do
|
137
|
-
verify_email_retrieve
|
138
|
-
end
|
139
|
-
|
140
|
-
test_et :email_retrieve, :start_date => Date.parse('2008-09-15'),
|
141
|
-
:end_date => Date.parse('2008-10-15') do
|
142
|
-
verify_email_retrieve
|
143
|
-
end
|
144
|
-
|
145
|
-
test_et :email_retrieve, 'Welcome to Fortune One!',
|
146
|
-
:start_date => Date.parse('2008-09-15'),
|
147
|
-
:end_date => Date.parse('2008-10-15') do
|
148
|
-
verify_email_retrieve
|
149
|
-
end
|
150
|
-
|
151
|
-
def verify_email_retrieve
|
152
|
-
@res.size.should == 3
|
153
|
-
|
154
|
-
@res = @res.last
|
155
|
-
@res.emailid.should == 205449
|
156
|
-
@res.emailname.should == 'ET 04 Demo Email'
|
157
|
-
@res.emailsubject.should == 'ET 04 Demo Email'
|
158
|
-
@res.emailcreateddate.should == Date.parse('2004-03-19')
|
159
|
-
@res.categoryid.should == 75163
|
160
|
-
@res.to_s.should == 'ET 04 Demo Email'
|
161
|
-
end
|
162
|
-
|
163
|
-
test_et :email_add, 'Your body email name',
|
164
|
-
'Your email subject line',
|
165
|
-
:body => 'Your HTML email body' do
|
166
|
-
@res.should == 44180
|
167
|
-
end
|
168
|
-
|
169
|
-
test_et :email_add, 'Your file email name',
|
170
|
-
'Your email subject line',
|
171
|
-
:file => 'Filename' do
|
172
|
-
@res.should == 44180
|
173
|
-
end
|
174
|
-
|
175
|
-
test_et :email_add_text, 155324, :body => 'Your text email body' do
|
176
|
-
@res.should be_true
|
177
|
-
end
|
178
|
-
|
179
|
-
test_et :email_add_text, 155325, :file => 'Filename' do
|
180
|
-
@res.should be_true
|
181
|
-
end
|
182
|
-
|
183
|
-
test_et :email_retrieve_body, 12344556 do
|
184
|
-
@res.should == '<h1>...BODY...</h1>'
|
185
|
-
end
|
186
|
-
|
187
|
-
#################################################################
|
188
|
-
|
189
|
-
test_et :job_send, 112233, [12345, 12346],
|
190
|
-
:suppress_ids => 35612,
|
191
|
-
:from_name => 'FrName',
|
192
|
-
:from_email => 'fr.email@nowhere.com',
|
193
|
-
:additional => 'addit',
|
194
|
-
:multipart_mime => true,
|
195
|
-
:track_links => false,
|
196
|
-
:send_date => '5/3/2011',
|
197
|
-
:send_time => '17:35',
|
198
|
-
:test_send => true do
|
199
|
-
@res.should == 2030602
|
200
|
-
end
|
201
|
-
|
202
|
-
specify "job_send with error" do
|
203
|
-
expect do
|
204
|
-
et_request :job_send, [:BOGUS, nil, nil], "job send with error"
|
205
|
-
end.should raise_error(
|
206
|
-
ExactTarget::Error,
|
207
|
-
'ExactTarget error #68: File does not exist.'
|
208
|
-
)
|
209
|
-
end
|
210
|
-
|
211
|
-
#################################################################
|
212
|
-
|
213
|
-
context :send_to_exact_target do
|
214
|
-
before(:each) do
|
215
|
-
@path = '/foo?qf=xml&xml=%3Csomexml/%3E'
|
216
|
-
@http = mock('Net::HTTP')
|
217
|
-
@http.should_receive(:use_ssl=).with(true)
|
218
|
-
@http.should_receive(:open_timeout=).with(2)
|
219
|
-
@http.should_receive(:read_timeout=).with(5)
|
220
|
-
Net::HTTP.should_receive(:new).with('base.url.com', 443).and_return(@http)
|
221
|
-
end
|
222
|
-
|
223
|
-
specify :success do
|
224
|
-
resp = stub('Net::HTTPSuccess', :is_a? => true, :body => 'xyz')
|
225
|
-
@http.should_receive(:get).with(@path).and_return(resp)
|
226
|
-
ExactTarget.send_to_exact_target('<somexml/>').should == 'xyz'
|
227
|
-
end
|
228
|
-
|
229
|
-
specify :error do
|
230
|
-
resp = stub('Net::HTTPFailure', :error! => 'err')
|
231
|
-
@http.should_receive(:get).with(@path).and_return(resp)
|
232
|
-
ExactTarget.send_to_exact_target('<somexml/>').should == 'err'
|
233
|
-
end
|
234
|
-
end
|
235
|
-
|
236
|
-
specify "method_missing should throw normal error when bogus method" do
|
237
|
-
expect { ExactTarget.bogus }.should raise_error
|
238
|
-
end
|
239
|
-
|
240
|
-
#################################################################
|
241
|
-
|
242
|
-
private
|
243
|
-
|
244
|
-
def et_request(method, args, desc)
|
245
|
-
request, response = et_xml(method, args, desc)
|
246
|
-
request = <<-END.gsub(/>\s+</m, '><').strip
|
247
|
-
<?xml version="1.0"?>
|
248
|
-
<exacttarget>
|
249
|
-
<authorization>
|
250
|
-
<username>a_user</username>
|
251
|
-
<password>a_pass</password>
|
252
|
-
</authorization>
|
253
|
-
<system>
|
254
|
-
#{request}
|
255
|
-
</system>
|
256
|
-
</exacttarget>
|
257
|
-
END
|
258
|
-
response = <<-END.gsub(/>\s+</m, '><').strip
|
259
|
-
<?xml version='1.0'?>
|
260
|
-
<exacttarget>
|
261
|
-
<system>
|
262
|
-
#{response}
|
263
|
-
</system>
|
264
|
-
</exacttarget>
|
265
|
-
END
|
266
|
-
@logger.should_receive(:debug).twice
|
267
|
-
ExactTarget.should_receive(:send_to_exact_target).with(request).and_return(response)
|
268
|
-
unless method == :accountinfo_retrieve_attrbs
|
269
|
-
ExactTarget.stub :accountinfo_retrieve_attrbs => @atts
|
270
|
-
end
|
271
|
-
ExactTarget.send(method, *args)
|
272
|
-
end
|
273
|
-
|
274
|
-
def et_xml(method, args, desc)
|
275
|
-
xml = @xml[method.to_s] || {}
|
276
|
-
args = args.map { |a| a.is_a?(Hash) ? 'HASH' : a }
|
277
|
-
if args.size == 1 and xml.has_key?(k = args.first)
|
278
|
-
xml = xml[k]
|
279
|
-
elsif xml.has_key?(k = args.join(', '))
|
280
|
-
xml = xml[k]
|
281
|
-
elsif xml.has_key?(k = args.hash)
|
282
|
-
xml = xml[k]
|
283
|
-
end
|
284
|
-
%w(request response).map do |k|
|
285
|
-
xml[k] or raise "Can not determine #{k} xml for #{desc}"
|
286
|
-
end
|
287
|
-
end
|
288
|
-
|
289
|
-
end
|
290
|
-
=end
|