postal 0.1.4
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/.document +5 -0
- data/.gitignore +8 -0
- data/LICENSE +20 -0
- data/README.rdoc +108 -0
- data/Rakefile +60 -0
- data/VERSION +1 -0
- data/lib/postal.rb +47 -0
- data/lib/postal/base.rb +47 -0
- data/lib/postal/list.rb +28 -0
- data/lib/postal/lmapi/lmapi.rb +1311 -0
- data/lib/postal/lmapi/lmapi_driver.rb +687 -0
- data/lib/postal/lmapi/lmapi_mapping_registry.rb +1237 -0
- data/lib/postal/mailing.rb +171 -0
- data/lib/postal/member.rb +141 -0
- data/postal.gemspec +66 -0
- data/test/list_test.rb +20 -0
- data/test/lmapiClient.rb +854 -0
- data/test/lyris_sample.yml +16 -0
- data/test/mailing_test.rb +60 -0
- data/test/member_test.rb +89 -0
- data/test/postal_suite.rb +4 -0
- data/test/test_helper.rb +23 -0
- metadata +91 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# This is the Lyris config for your tests. This runs your test against a real Lyris implementation, so make sure
|
|
2
|
+
# you're using a test list that won't mind having tons of users added and subtracted on a regular basis.
|
|
3
|
+
#
|
|
4
|
+
# email_in_list => when testing mailings, this is where they will be sent to (this user is on your list)
|
|
5
|
+
# email_not_in_list => another test email, but this email address isn't in your list
|
|
6
|
+
# from: => used as the From: for those test mailings
|
|
7
|
+
|
|
8
|
+
config:
|
|
9
|
+
username: username@company.com
|
|
10
|
+
password: company123
|
|
11
|
+
wsdl: http://mail.company.com:82/?wsdl
|
|
12
|
+
list_name: company-sample
|
|
13
|
+
email_in_list: me@company.com
|
|
14
|
+
email_not_in_list: other@somewhere.com
|
|
15
|
+
from: The Company <noreply@company.com>
|
|
16
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class MailingTest < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
@config = nil
|
|
6
|
+
|
|
7
|
+
def setup
|
|
8
|
+
load_config
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_can_send_valid_mailing
|
|
12
|
+
mail = Postal::Mailing.new( :to => @config['email_in_list'],
|
|
13
|
+
:html_message => "<p>Test from Postal at #{Time.now.to_s}</p>",
|
|
14
|
+
:text_message => 'Test test from Postal at #{Time.now.to_s}',
|
|
15
|
+
:from => @config['from'],
|
|
16
|
+
:subject => 'postal_test.rb')
|
|
17
|
+
assert mail.valid?
|
|
18
|
+
assert mail.send
|
|
19
|
+
|
|
20
|
+
# with explicit list_name
|
|
21
|
+
mail = Postal::Mailing.new( :to => @config['email_in_list'],
|
|
22
|
+
:html_message => "<p>Test from Postal at #{Time.now.to_s}</p>",
|
|
23
|
+
:text_message => 'Test test from Postal at #{Time.now.to_s}',
|
|
24
|
+
:from => @config['from'],
|
|
25
|
+
:list_name => @config['list_name'],
|
|
26
|
+
:subject => 'postal_test.rb')
|
|
27
|
+
assert mail.valid?
|
|
28
|
+
assert mail.send
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_can_send_email_to_address_not_in_list
|
|
32
|
+
mail = Postal::Mailing.new( :to => @config['email_not_in_list'],
|
|
33
|
+
:html_message => "<p>Test from Postal at #{Time.now.to_s}</p>",
|
|
34
|
+
:text_message => 'Text test from Postal at #{Time.now.to_s}',
|
|
35
|
+
:from => @config['from'],
|
|
36
|
+
:subject => 'postal_test.rb')
|
|
37
|
+
assert mail.send
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_can_send_mailing_after_making_valid
|
|
41
|
+
mail = Postal::Mailing.new( :to => @config['email_in_list'],
|
|
42
|
+
:html_message => "<p>Test from Postal at #{Time.now.to_s}</p>",
|
|
43
|
+
:from => @config['from'] )
|
|
44
|
+
assert !mail.valid?
|
|
45
|
+
mail.list_name = @config['list_name']
|
|
46
|
+
assert !mail.valid?
|
|
47
|
+
mail.subject = 'postal_test.rb'
|
|
48
|
+
assert mail.valid?
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_cannot_send_invalid_mailing
|
|
52
|
+
mail = Postal::Mailing.new( :to => @config['valid_email'],
|
|
53
|
+
:html_message => "<p>Test from Postal at #{Time.now.to_s}</p>",
|
|
54
|
+
:from => @config['from'] )
|
|
55
|
+
assert !mail.valid?
|
|
56
|
+
assert !mail.send
|
|
57
|
+
assert_raises(Postal::CouldNotSendMailing) { mail.send! }
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
data/test/member_test.rb
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class MemberTest < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
@config = nil
|
|
6
|
+
|
|
7
|
+
def setup
|
|
8
|
+
load_config
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def teardown
|
|
12
|
+
delete_test_members
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# members
|
|
16
|
+
def test_can_create_member
|
|
17
|
+
assert Postal::Member.new(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe").save
|
|
18
|
+
assert Postal::Member.new(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe").save!
|
|
19
|
+
assert Postal::Member.new(:email => "john.doe#{rand(1000000)}@anonymous.com").save # create member with no name
|
|
20
|
+
assert Postal::Member.new(:email => "john.doe#{rand(1000000)}@anonymous.com").save! # create member with no name
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_can_create_member_with_explicit_list
|
|
24
|
+
assert Postal::Member.new(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe", :list_name => @config['list_name']).save
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_duplicate_member_cannot_be_saved
|
|
28
|
+
new_member = Postal::Member.new(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "Original")
|
|
29
|
+
new_member.save
|
|
30
|
+
repeat_member = Postal::Member.new(:email => new_member.email, :name => "Duplicate")
|
|
31
|
+
assert !repeat_member.save
|
|
32
|
+
assert_raises(Postal::CouldNotCreateMember) { repeat_member.save! }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_create_user_in_one_step
|
|
36
|
+
assert Postal::Member.create(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe")
|
|
37
|
+
assert Postal::Member.create!(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe")
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_can_update_user_demographics_after_creation
|
|
41
|
+
new_member = Postal::Member.create(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe")
|
|
42
|
+
assert new_member.update_attributes(:field_0 => 'Baseball')
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_can_create_user_and_demographics_at_creation
|
|
46
|
+
assert Postal::Member.create(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe", :field_0 => 'Baseball', :field_1 => 'Male')
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_can_find_member_by_id
|
|
50
|
+
new_member = Postal::Member.create(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe")
|
|
51
|
+
assert Postal::Member.find(new_member.id)
|
|
52
|
+
assert Postal::Member.find(new_member.id, @config['list_name']) # with explicit list_name
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_can_find_member_by_email
|
|
56
|
+
new_member = Postal::Member.create(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe")
|
|
57
|
+
assert Postal::Member.find(new_member.email)
|
|
58
|
+
assert Postal::Member.find(new_member.email, @config['list_name']) # with explicit list_name
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_can_find_member_by_filters
|
|
62
|
+
Postal::Member.create(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe")
|
|
63
|
+
Postal::Member.create(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe 2")
|
|
64
|
+
assert members = Postal::Member.find_by_filter('EmailAddress like john.doe%')
|
|
65
|
+
assert_equal members.size, 2
|
|
66
|
+
assert Postal::Member.find_by_filter("ListName=#{@config['list_name']}",'EmailAddress like john.doe%') # with explicit list_name
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_can_delete_member
|
|
70
|
+
new_member = Postal::Member.create(:email => "john.doe-delete@anonymous.com", :name => "John Doe")
|
|
71
|
+
assert Postal::Member.find(new_member.email)
|
|
72
|
+
Postal::Member.destroy("EmailAddress like john.doe-delete%")
|
|
73
|
+
assert !Postal::Member.find(new_member.email)
|
|
74
|
+
|
|
75
|
+
# explicit list_name
|
|
76
|
+
new_member = Postal::Member.create(:email => "john.doe-delete@anonymous.com", :name => "John Doe")
|
|
77
|
+
assert Postal::Member.find(new_member.email)
|
|
78
|
+
Postal::Member.destroy("ListName=#{@config['list_name']}","EmailAddress like john.doe-delete%")
|
|
79
|
+
assert !Postal::Member.find(new_member.email)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_can_create_find_and_update_member
|
|
83
|
+
Postal::Member.create(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe")
|
|
84
|
+
assert member = Postal::Member.find_by_filter('EmailAddress like john.doe%')
|
|
85
|
+
assert member.update_attributes(:field_0 => 'Baseball')
|
|
86
|
+
assert_equal Postal::Member.find_by_filter('EmailAddress like john.doe%').demographics[:field_0], 'Baseball'
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'test/unit'
|
|
3
|
+
# require 'shoulda'
|
|
4
|
+
|
|
5
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
6
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
7
|
+
require 'postal'
|
|
8
|
+
|
|
9
|
+
class Test::Unit::TestCase
|
|
10
|
+
|
|
11
|
+
def load_config
|
|
12
|
+
@config = YAML.load(File.read('lyris.yml'))['config']
|
|
13
|
+
Postal.options[:wsdl] = @config['wsdl']
|
|
14
|
+
Postal.options[:username] = @config['username']
|
|
15
|
+
Postal.options[:password] = @config['password']
|
|
16
|
+
Postal.options[:list_name] = @config['list_name']
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def delete_test_members
|
|
20
|
+
Postal::Member.destroy('EmailAddress like john.doe%')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: postal
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.4
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Rob Cameron
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2009-08-31 00:00:00 -07:00
|
|
13
|
+
default_executable:
|
|
14
|
+
dependencies:
|
|
15
|
+
- !ruby/object:Gem::Dependency
|
|
16
|
+
name: soap4r
|
|
17
|
+
type: :runtime
|
|
18
|
+
version_requirement:
|
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
20
|
+
requirements:
|
|
21
|
+
- - ">="
|
|
22
|
+
- !ruby/object:Gem::Version
|
|
23
|
+
version: 1.5.8
|
|
24
|
+
version:
|
|
25
|
+
description: Lyris is an enterprise email service. Postal makes it easy for Ruby to talk to Lyris's API.
|
|
26
|
+
email: cannikinn@gmail.com
|
|
27
|
+
executables: []
|
|
28
|
+
|
|
29
|
+
extensions: []
|
|
30
|
+
|
|
31
|
+
extra_rdoc_files:
|
|
32
|
+
- LICENSE
|
|
33
|
+
- README.rdoc
|
|
34
|
+
files:
|
|
35
|
+
- .document
|
|
36
|
+
- .gitignore
|
|
37
|
+
- LICENSE
|
|
38
|
+
- README.rdoc
|
|
39
|
+
- Rakefile
|
|
40
|
+
- VERSION
|
|
41
|
+
- lib/postal.rb
|
|
42
|
+
- lib/postal/base.rb
|
|
43
|
+
- lib/postal/list.rb
|
|
44
|
+
- lib/postal/lmapi/lmapi.rb
|
|
45
|
+
- lib/postal/lmapi/lmapi_driver.rb
|
|
46
|
+
- lib/postal/lmapi/lmapi_mapping_registry.rb
|
|
47
|
+
- lib/postal/mailing.rb
|
|
48
|
+
- lib/postal/member.rb
|
|
49
|
+
- postal.gemspec
|
|
50
|
+
- test/list_test.rb
|
|
51
|
+
- test/lmapiClient.rb
|
|
52
|
+
- test/lyris_sample.yml
|
|
53
|
+
- test/mailing_test.rb
|
|
54
|
+
- test/member_test.rb
|
|
55
|
+
- test/postal_suite.rb
|
|
56
|
+
- test/test_helper.rb
|
|
57
|
+
has_rdoc: true
|
|
58
|
+
homepage: http://github.com/cannikin/postal
|
|
59
|
+
licenses: []
|
|
60
|
+
|
|
61
|
+
post_install_message:
|
|
62
|
+
rdoc_options:
|
|
63
|
+
- --charset=UTF-8
|
|
64
|
+
require_paths:
|
|
65
|
+
- lib
|
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
67
|
+
requirements:
|
|
68
|
+
- - ">="
|
|
69
|
+
- !ruby/object:Gem::Version
|
|
70
|
+
version: "0"
|
|
71
|
+
version:
|
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
|
+
requirements:
|
|
74
|
+
- - ">="
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: "0"
|
|
77
|
+
version:
|
|
78
|
+
requirements: []
|
|
79
|
+
|
|
80
|
+
rubyforge_project:
|
|
81
|
+
rubygems_version: 1.3.5
|
|
82
|
+
signing_key:
|
|
83
|
+
specification_version: 3
|
|
84
|
+
summary: Gem for talking to the Lyris API
|
|
85
|
+
test_files:
|
|
86
|
+
- test/list_test.rb
|
|
87
|
+
- test/lmapiClient.rb
|
|
88
|
+
- test/mailing_test.rb
|
|
89
|
+
- test/member_test.rb
|
|
90
|
+
- test/postal_suite.rb
|
|
91
|
+
- test/test_helper.rb
|