cannikin-postal 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/postal/mailing.rb +1 -1
- data/lib/postal/member.rb +39 -16
- data/postal.gemspec +1 -1
- data/test/lyris_sample.yml +4 -2
- data/test/mailing_test.rb +21 -6
- data/test/member_test.rb +41 -21
- data/test/test_helper.rb +2 -1
- metadata +3 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/lib/postal/mailing.rb
CHANGED
@@ -79,7 +79,7 @@ module Postal
|
|
79
79
|
@html_section_encoding = args[:html_section_encoding]
|
80
80
|
@is_html_section_encoded = args[:is_html_section_encoded]
|
81
81
|
@is_text_section_encoded = args[:is_text_section_encoded]
|
82
|
-
@list_name = args[:list_name]
|
82
|
+
@list_name = args[:list_name] || Postal.options[:list_name]
|
83
83
|
@recency_number_of_mailings = args[:recency_number_of_mailings]
|
84
84
|
@recency_which = args[:recency_which]
|
85
85
|
@reply_to = args[:reply_to]
|
data/lib/postal/member.rb
CHANGED
@@ -3,30 +3,51 @@ module Postal
|
|
3
3
|
|
4
4
|
class << self
|
5
5
|
|
6
|
-
def find_by_filter(args)
|
7
|
-
|
6
|
+
def find_by_filter(*args)
|
7
|
+
unless args.find { |arg| arg.match(/ListName/) }
|
8
|
+
args << "ListName=#{Postal.options[:list_name]}"
|
9
|
+
end
|
10
|
+
if members = Postal.driver.selectMembers(args)
|
11
|
+
members.collect do |member|
|
12
|
+
demographics = {}
|
13
|
+
member.demographics.each do |demo|
|
14
|
+
demographics.merge!({ demo.name.to_sym => demo.value })
|
15
|
+
end
|
16
|
+
Member.new(:email => member.emailAddress, :name => member.fullName, :id => member.memberID, :list_name => member.listName, :demographics => demographics)
|
17
|
+
end
|
18
|
+
else
|
19
|
+
return nil
|
20
|
+
end
|
8
21
|
end
|
9
22
|
|
10
23
|
|
11
24
|
# Will NOT let you delete the entire list's members (only pass a ListName) Returns the number of members that were deleted, or nil if none were
|
12
|
-
def destroy(args)
|
13
|
-
|
25
|
+
def destroy(*args)
|
26
|
+
unless args.find { |arg| arg.match(/ListName/) }
|
27
|
+
args << "ListName=#{Postal.options[:list_name]}"
|
28
|
+
end
|
29
|
+
# raise Postal::WouldDeleteAllMembers, 'Not passing any parameters (other than ListName) to this method will delete ALL members of a list. If you really want to delete all members of this list, use destroy! instead.' if args.to_a.size == 1 && args.to_a.first.match(/ListName/)
|
14
30
|
return Postal.driver.deleteMembers(args)
|
15
31
|
end
|
16
32
|
|
17
33
|
|
18
34
|
# WILL let you delete an entire list's members (only pass a ListName). Returns the number of members that were deleted, or nil if none were
|
19
|
-
def destroy!(args)
|
20
|
-
|
21
|
-
end
|
35
|
+
# def destroy!(*args)
|
36
|
+
# return Postal.driver.deleteMembers(args)
|
37
|
+
# end
|
22
38
|
|
23
39
|
|
24
40
|
protected
|
25
41
|
|
26
42
|
def find_by_email(args,options)
|
27
|
-
|
28
|
-
|
43
|
+
if args.size == 1
|
44
|
+
list_name = Postal.options[:list_name]
|
45
|
+
else
|
46
|
+
list_name = args.last
|
47
|
+
end
|
29
48
|
email = args.first
|
49
|
+
member_id = 0
|
50
|
+
|
30
51
|
begin
|
31
52
|
return Postal.driver.getMemberID(Postal::Lmapi::SimpleMemberStruct.new(list_name,member_id,email))
|
32
53
|
rescue SOAP::FaultError
|
@@ -55,17 +76,19 @@ module Postal
|
|
55
76
|
|
56
77
|
end
|
57
78
|
|
58
|
-
DEFAULT_ATTRIBUTES = { :id => nil, :email => nil, :name => nil, :list_name => nil, :demographics =>
|
79
|
+
DEFAULT_ATTRIBUTES = { :id => nil, :email => nil, :name => nil, :list_name => nil, :demographics => {} }
|
59
80
|
|
60
81
|
attr_accessor :id, :email, :name, :list_name, :demographics
|
61
82
|
|
83
|
+
|
62
84
|
# Create a new member instance
|
63
|
-
def initialize(
|
64
|
-
|
65
|
-
@
|
66
|
-
@
|
67
|
-
@
|
68
|
-
@
|
85
|
+
def initialize(attributes={})
|
86
|
+
attributes = DEFAULT_ATTRIBUTES.merge(attributes)
|
87
|
+
@id = attributes[:id]
|
88
|
+
@email = attributes[:email]
|
89
|
+
@name = attributes[:name]
|
90
|
+
@list_name = attributes[:list_name] || Postal.options[:list_name]
|
91
|
+
@demographics = attributes[:demographics]
|
69
92
|
end
|
70
93
|
|
71
94
|
|
data/postal.gemspec
CHANGED
data/test/lyris_sample.yml
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# This is the Lyris config for your tests. This runs your test against a real Lyris implementation, so make sure
|
2
2
|
# you're using a test list that won't mind having tons of users added and subtracted on a regular basis.
|
3
3
|
#
|
4
|
-
#
|
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
|
5
6
|
# from: => used as the From: for those test mailings
|
6
7
|
|
7
8
|
config:
|
@@ -9,6 +10,7 @@ config:
|
|
9
10
|
password: company123
|
10
11
|
wsdl: http://mail.company.com:82/?wsdl
|
11
12
|
list_name: company-sample
|
12
|
-
|
13
|
+
email_in_list: me@company.com
|
14
|
+
email_not_in_list: other@somewhere.com
|
13
15
|
from: The Company <noreply@company.com>
|
14
16
|
|
data/test/mailing_test.rb
CHANGED
@@ -9,9 +9,18 @@ class MailingTest < Test::Unit::TestCase
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def test_can_send_valid_mailing
|
12
|
-
mail = Postal::Mailing.new( :to => @config['
|
12
|
+
mail = Postal::Mailing.new( :to => @config['email_in_list'],
|
13
13
|
:html_message => "<p>Test from Postal at #{Time.now.to_s}</p>",
|
14
|
-
:text_message => 'Test from Postal at #{Time.now.to_s}',
|
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}',
|
15
24
|
:from => @config['from'],
|
16
25
|
:list_name => @config['list_name'],
|
17
26
|
:subject => 'postal_test.rb')
|
@@ -19,23 +28,29 @@ class MailingTest < Test::Unit::TestCase
|
|
19
28
|
assert mail.send
|
20
29
|
end
|
21
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
|
+
|
22
40
|
def test_can_send_mailing_after_making_valid
|
23
|
-
mail = Postal::Mailing.new( :to => @config['
|
41
|
+
mail = Postal::Mailing.new( :to => @config['email_in_list'],
|
24
42
|
:html_message => "<p>Test from Postal at #{Time.now.to_s}</p>",
|
25
|
-
:text_message => 'Test from Postal at #{Time.now.to_s}',
|
26
43
|
:from => @config['from'] )
|
27
44
|
assert !mail.valid?
|
28
45
|
mail.list_name = @config['list_name']
|
29
46
|
assert !mail.valid?
|
30
47
|
mail.subject = 'postal_test.rb'
|
31
48
|
assert mail.valid?
|
32
|
-
assert mail.send
|
33
49
|
end
|
34
50
|
|
35
51
|
def test_cannot_send_invalid_mailing
|
36
52
|
mail = Postal::Mailing.new( :to => @config['valid_email'],
|
37
53
|
:html_message => "<p>Test from Postal at #{Time.now.to_s}</p>",
|
38
|
-
:text_message => 'Test from Postal at #{Time.now.to_s}',
|
39
54
|
:from => @config['from'] )
|
40
55
|
assert !mail.valid?
|
41
56
|
assert !mail.send
|
data/test/member_test.rb
CHANGED
@@ -14,54 +14,74 @@ class MemberTest < Test::Unit::TestCase
|
|
14
14
|
|
15
15
|
# members
|
16
16
|
def test_can_create_member
|
17
|
-
assert Postal::Member.new("john.doe#{rand(1000000)}@anonymous.com", "John Doe"
|
18
|
-
assert Postal::Member.new("john.doe#{rand(1000000)}@anonymous.com", "John Doe"
|
19
|
-
assert Postal::Member.new("john.doe#{rand(1000000)}@anonymous.com"
|
20
|
-
assert Postal::Member.new("john.doe#{rand(1000000)}@anonymous.com"
|
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
|
21
25
|
end
|
22
26
|
|
23
27
|
def test_duplicate_member_cannot_be_saved
|
24
|
-
new_member = Postal::Member.new("john.doe#{rand(1000000)}@anonymous.com","Original"
|
28
|
+
new_member = Postal::Member.new(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "Original")
|
25
29
|
new_member.save
|
26
|
-
repeat_member = Postal::Member.new(new_member.email,"Duplicate"
|
30
|
+
repeat_member = Postal::Member.new(:email => new_member.email, :name => "Duplicate")
|
27
31
|
assert !repeat_member.save
|
28
32
|
assert_raises(Postal::CouldNotCreateMember) { repeat_member.save! }
|
29
33
|
end
|
30
34
|
|
31
35
|
def test_create_user_in_one_step
|
32
|
-
assert Postal::Member.create("john.doe#{rand(1000000)}@anonymous.com","John Doe"
|
33
|
-
assert Postal::Member.create!("john.doe#{rand(1000000)}@anonymous.com","John Doe"
|
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")
|
34
38
|
end
|
35
39
|
|
36
40
|
def test_can_update_user_demographics_after_creation
|
37
|
-
new_member = Postal::Member.create("john.doe#{rand(1000000)}@anonymous.com","John Doe"
|
41
|
+
new_member = Postal::Member.create(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe")
|
38
42
|
assert new_member.update_attributes(:field_0 => 'Baseball')
|
39
43
|
end
|
40
44
|
|
41
45
|
def test_can_create_user_and_demographics_at_creation
|
42
|
-
assert Postal::Member.create("john.doe#{rand(1000000)}@anonymous.com","John Doe",
|
46
|
+
assert Postal::Member.create(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe", :field_0 => 'Baseball', :field_1 => 'Male')
|
43
47
|
end
|
44
48
|
|
45
49
|
def test_can_find_member_by_id
|
46
|
-
new_member = Postal::Member.create("john.doe#{rand(1000000)}@anonymous.com","John Doe"
|
47
|
-
assert Postal::Member.find(new_member.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
|
48
53
|
end
|
49
54
|
|
50
55
|
def test_can_find_member_by_email
|
51
|
-
new_member = Postal::Member.create("john.doe#{rand(1000000)}@anonymous.com","John Doe"
|
52
|
-
assert Postal::Member.find(new_member.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
|
53
59
|
end
|
54
60
|
|
55
61
|
def test_can_find_member_by_filters
|
56
|
-
Postal::Member.create("john.doe#{rand(1000000)}@anonymous.com","John Doe"
|
57
|
-
assert Postal::Member.find_by_filter(
|
62
|
+
Postal::Member.create(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe")
|
63
|
+
assert Postal::Member.find_by_filter('EmailAddress like john.doe%')
|
64
|
+
assert Postal::Member.find_by_filter("ListName=#{@config['list_name']}",'EmailAddress like john.doe%') # with explicit list_name
|
58
65
|
end
|
59
66
|
|
60
67
|
def test_can_delete_member
|
61
|
-
new_member = Postal::Member.create("john.doe-delete@anonymous.com","John Doe"
|
62
|
-
assert Postal::Member.find(new_member.email
|
63
|
-
Postal::Member.destroy(
|
64
|
-
assert !Postal::Member.find(new_member.email
|
68
|
+
new_member = Postal::Member.create(:email => "john.doe-delete@anonymous.com", :name => "John Doe")
|
69
|
+
assert Postal::Member.find(new_member.email)
|
70
|
+
Postal::Member.destroy("EmailAddress like john.doe-delete%")
|
71
|
+
assert !Postal::Member.find(new_member.email)
|
72
|
+
|
73
|
+
# explicit list_name
|
74
|
+
new_member = Postal::Member.create(:email => "john.doe-delete@anonymous.com", :name => "John Doe")
|
75
|
+
assert Postal::Member.find(new_member.email)
|
76
|
+
Postal::Member.destroy("ListName=#{@config['list_name']}","EmailAddress like john.doe-delete%")
|
77
|
+
assert !Postal::Member.find(new_member.email)
|
65
78
|
end
|
66
|
-
|
79
|
+
|
80
|
+
def test_can_create_find_and_update_member
|
81
|
+
Postal::Member.create(:email => "john.doe#{rand(1000000)}@anonymous.com", :name => "John Doe")
|
82
|
+
assert member = Postal::Member.find_by_filter('EmailAddress like john.doe%')
|
83
|
+
assert member.first.update_attributes(:field_0 => 'Baseball')
|
84
|
+
assert_equal Postal::Member.find_by_filter('EmailAddress like john.doe%').first.demographics[:field_0], 'Baseball'
|
85
|
+
end
|
86
|
+
|
67
87
|
end
|
data/test/test_helper.rb
CHANGED
@@ -13,10 +13,11 @@ class Test::Unit::TestCase
|
|
13
13
|
Postal.options[:wsdl] = @config['wsdl']
|
14
14
|
Postal.options[:username] = @config['username']
|
15
15
|
Postal.options[:password] = @config['password']
|
16
|
+
Postal.options[:list_name] = @config['list_name']
|
16
17
|
end
|
17
18
|
|
18
19
|
def delete_test_members
|
19
|
-
Postal::Member.destroy(
|
20
|
+
Postal::Member.destroy('EmailAddress like john.doe%')
|
20
21
|
end
|
21
22
|
|
22
23
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cannikin-postal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Cameron
|
@@ -47,6 +47,7 @@ files:
|
|
47
47
|
- test/test_helper.rb
|
48
48
|
has_rdoc: false
|
49
49
|
homepage: http://github.com/cannikin/postal
|
50
|
+
licenses:
|
50
51
|
post_install_message:
|
51
52
|
rdoc_options:
|
52
53
|
- --charset=UTF-8
|
@@ -67,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
67
68
|
requirements: []
|
68
69
|
|
69
70
|
rubyforge_project:
|
70
|
-
rubygems_version: 1.
|
71
|
+
rubygems_version: 1.3.5
|
71
72
|
signing_key:
|
72
73
|
specification_version: 3
|
73
74
|
summary: Gem for talking to the Lyris API
|