exacttarget 0.0.0 → 0.0.1

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/Gemfile CHANGED
@@ -10,5 +10,5 @@ group :development do
10
10
  gem "bundler", "~> 1.0.0"
11
11
  gem "jeweler", "~> 1.6.0"
12
12
  gem "rcov", ">= 0"
13
- gem "hpricot", ">= 0.8.4"
13
+ gem "nokogiri", ">= 1.4.4"
14
14
  end
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ git (1.2.5)
5
+ jeweler (1.6.0)
6
+ bundler (~> 1.0.0)
7
+ git (>= 1.2.5)
8
+ rake
9
+ nokogiri (1.4.4)
10
+ rake (0.8.7)
11
+ rcov (0.9.9)
12
+ shoulda (2.11.3)
13
+
14
+ PLATFORMS
15
+ ruby
16
+
17
+ DEPENDENCIES
18
+ bundler (~> 1.0.0)
19
+ jeweler (~> 1.6.0)
20
+ nokogiri (>= 1.4.4)
21
+ rcov
22
+ shoulda
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.0.1
@@ -0,0 +1,65 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{exacttarget}
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Matthew Simpson"]
12
+ s.date = %q{2011-05-08}
13
+ s.description = %q{ExactTarget is a client system for communicating with the ExactTarget email system. The client supports the most up-to-date XML API and is capable of uploading email pastes, images and retrieving lists of subscribers, emails and more.}
14
+ s.email = %q{matt.simpson@alextom.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "exacttarget.gemspec",
28
+ "lib/exacttarget.rb",
29
+ "lib/exacttarget/client.rb",
30
+ "lib/exacttarget/email.rb",
31
+ "lib/exacttarget/templates/email.xml.erb",
32
+ "lib/exacttarget/templates/main.xml.erb"
33
+ ]
34
+ s.homepage = %q{http://github.com/msimpson/exacttarget}
35
+ s.licenses = ["MIT"]
36
+ s.require_paths = ["lib"]
37
+ s.rubygems_version = %q{1.3.7}
38
+ s.summary = %q{An XML API client for the ExactTarget email system.}
39
+
40
+ if s.respond_to? :specification_version then
41
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
42
+ s.specification_version = 3
43
+
44
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
46
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
47
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
48
+ s.add_development_dependency(%q<rcov>, [">= 0"])
49
+ s.add_development_dependency(%q<nokogiri>, [">= 1.4.4"])
50
+ else
51
+ s.add_dependency(%q<shoulda>, [">= 0"])
52
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
53
+ s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
54
+ s.add_dependency(%q<rcov>, [">= 0"])
55
+ s.add_dependency(%q<nokogiri>, [">= 1.4.4"])
56
+ end
57
+ else
58
+ s.add_dependency(%q<shoulda>, [">= 0"])
59
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
60
+ s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
61
+ s.add_dependency(%q<rcov>, [">= 0"])
62
+ s.add_dependency(%q<nokogiri>, [">= 1.4.4"])
63
+ end
64
+ end
65
+
data/lib/exacttarget.rb CHANGED
@@ -1,5 +1,15 @@
1
- module ExactTarget
2
- def self.do
3
- "Initial"
4
- end
1
+ # Nokogiri is required for XML parsing:
2
+ begin
3
+ require 'nokogiri'
4
+ rescue LoadError
5
+ puts '[ExactTarget] Error: Nokogiri is missing, run "bundle install".'
5
6
  end
7
+
8
+ # Standard:
9
+ require 'net/https'
10
+ require 'uri'
11
+ require 'erb'
12
+
13
+ # Library:
14
+ require 'exacttarget/client'
15
+ require 'exacttarget/email'
@@ -0,0 +1,41 @@
1
+ module ExactTarget
2
+ class Client
3
+
4
+ attr_reader :username, :password
5
+
6
+ public
7
+
8
+ def initialize(username, password)
9
+ @username = username
10
+ @password = password
11
+ @uri = URI.parse('https://api.dc1.exacttarget.com/integrate.asp')
12
+ @url = Net::HTTP.new(@uri.host, @uri.port)
13
+ @url.use_ssl = true
14
+ end
15
+
16
+ private
17
+
18
+ def render(template)
19
+ path = File.join(File.dirname(__FILE__), "templates/#{template.to_s}.xml.erb")
20
+ file = File.open(path, 'r').read
21
+ ERB.new(file, 0, '<>').result(binding)
22
+ end
23
+
24
+ def send(xml)
25
+ @system = xml
26
+ post = 'qf=xml&xml=' + URI.escape(render(:main))
27
+
28
+ begin
29
+ @url.post(@uri.path, post,
30
+ {
31
+ 'Content-Type' => 'application/x-www-form-urlencoded',
32
+ 'Content-length' => post.length.to_s
33
+ }
34
+ ).body
35
+ rescue SocketError
36
+ puts '[ExactTarget] Error: API request failed (SocketError).'
37
+ end
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,79 @@
1
+ module ExactTarget
2
+ class Client
3
+
4
+ public
5
+
6
+ def email_find_all
7
+ email_search
8
+ end
9
+
10
+ def email_find_by_id(id)
11
+ email_search :id, id, true
12
+ end
13
+
14
+ def email_find_by_name(name, get_body = false)
15
+ email_search :name, name, get_body
16
+ end
17
+
18
+ def email_find_by_subject(subject, get_body = false)
19
+ email_search :subject, subject, get_body
20
+ end
21
+
22
+ private
23
+
24
+ def email_search(filter = :all, value = '', get_body = false)
25
+ # ExactTarget does not return more than one email
26
+ # for any search besides all. So we must grab the
27
+ # entire list and search here (slow, but necessary).
28
+
29
+ @action = 'retrieve'
30
+ @sub_action = 'all'
31
+ @type = ''
32
+ @value = ''
33
+
34
+ list = []
35
+ Nokogiri::Slop(send(render(:email)))
36
+ .exacttarget
37
+ .system
38
+ .email
39
+ .emaillist.each do |email|
40
+ case filter
41
+ when :id
42
+ next if !email.emailid.content == value.to_s
43
+ when :name, :subject
44
+ next if !email.send('email' + filter.to_s).content.include? value.to_s
45
+ end
46
+
47
+ body = (email_get_body(email.emailid.content) if get_body) || nil
48
+
49
+ email.instance_eval do
50
+ list << {
51
+ :id => emailid.content,
52
+ :name => emailname.content,
53
+ :subject => emailsubject.content,
54
+ :category_id => categoryid.content,
55
+ :body => body
56
+ }
57
+ end
58
+ end
59
+
60
+ list
61
+ end
62
+
63
+ def email_get_body(id)
64
+ @action = 'retrieve'
65
+ @sub_action = 'htmlemail'
66
+ @type = 'emailid'
67
+ @value = id.to_s
68
+
69
+ begin
70
+ Nokogiri::XML(send(render(:email)))
71
+ .xpath('//htmlbody').text
72
+ rescue
73
+ nil
74
+ end
75
+ end
76
+
77
+ end
78
+
79
+ end
@@ -0,0 +1,35 @@
1
+ <system>
2
+ <system_name>email</system_name>
3
+ <action><%= @action %></action>
4
+ <sub_action><%= @sub_action %></sub_action>
5
+ <% if @action == 'retrieve' %>
6
+ <search_type><%= @type %></search_type>
7
+ <search_value><%= @value %></search_value>
8
+ <search_value2></search_value2>
9
+ <% if @sub_action == 'all' %>
10
+ <daterange>
11
+ <% if @type == 'daterange' || @type == 'emailnameanddaterange' %>
12
+ <startdate><%= @start_date %></startdate>
13
+ <enddate><%= @end_date %></enddate>
14
+ <% end %>
15
+ </daterange>
16
+ <% else %>
17
+ <search_value3></search_value3>
18
+ <% end %>
19
+ <% end %>
20
+ <% if @action == 'add' %>
21
+ <% if @sub_action == 'HTMLPaste' %>
22
+ <category></category>
23
+ <email_name><%= @name %></email_name>
24
+ <email_subject><%= @subject %></email_subject>
25
+ <% else %>
26
+ <search_type>emailid</search_type>
27
+ <search_value><%= @id %></search_value>
28
+ <% end %>
29
+ <% if @method == 'file' %>
30
+ <file_name><%= @file_name %></file_name>
31
+ <% else %>
32
+ <email_body><![ CDATA[<%= @body %>]]></email_body>
33
+ <% end %>
34
+ <% end %>
35
+ </system>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" ?>
2
+ <exacttarget>
3
+ <authorization>
4
+ <username><%= @username %></username>
5
+ <password><%= @password %></password>
6
+ </authorization>
7
+ <%= @system %>
8
+ </exacttarget>
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 0
9
- version: 0.0.0
8
+ - 1
9
+ version: 0.0.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Matthew Simpson
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-05-07 00:00:00 -04:00
17
+ date: 2011-05-08 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -74,17 +74,17 @@ dependencies:
74
74
  prerelease: false
75
75
  version_requirements: *id004
76
76
  - !ruby/object:Gem::Dependency
77
- name: hpricot
77
+ name: nokogiri
78
78
  requirement: &id005 !ruby/object:Gem::Requirement
79
79
  none: false
80
80
  requirements:
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
83
  segments:
84
- - 0
85
- - 8
84
+ - 1
85
+ - 4
86
86
  - 4
87
- version: 0.8.4
87
+ version: 1.4.4
88
88
  type: :development
89
89
  prerelease: false
90
90
  version_requirements: *id005
@@ -100,11 +100,17 @@ extra_rdoc_files:
100
100
  files:
101
101
  - .document
102
102
  - Gemfile
103
+ - Gemfile.lock
103
104
  - LICENSE.txt
104
105
  - README.rdoc
105
106
  - Rakefile
106
107
  - VERSION
108
+ - exacttarget.gemspec
107
109
  - lib/exacttarget.rb
110
+ - lib/exacttarget/client.rb
111
+ - lib/exacttarget/email.rb
112
+ - lib/exacttarget/templates/email.xml.erb
113
+ - lib/exacttarget/templates/main.xml.erb
108
114
  has_rdoc: true
109
115
  homepage: http://github.com/msimpson/exacttarget
110
116
  licenses:
@@ -119,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
125
  requirements:
120
126
  - - ">="
121
127
  - !ruby/object:Gem::Version
122
- hash: -3178855426262592808
128
+ hash: 2723099065645774218
123
129
  segments:
124
130
  - 0
125
131
  version: "0"