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 CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -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
- return Postal.driver.selectMembers(args)
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
- 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/)
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
- return Postal.driver.deleteMembers(args)
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
- list_name = args.last
28
- member_id = 0
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 => nil }
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(email,name,list_name,demographics={})
64
- @id = nil
65
- @email = email
66
- @name = name
67
- @list_name = list_name
68
- @demographics = demographics
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
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{postal}
5
- s.version = "0.1.0"
5
+ s.version = "0.1.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Rob Cameron"]
@@ -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
- # valid_email => when testing mailings, this is where they will be sent to
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
- valid_email: me@company.com
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['valid_email'],
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['valid_email'],
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", @config['list_name']).save
18
- assert Postal::Member.new("john.doe#{rand(1000000)}@anonymous.com", "John Doe", @config['list_name']).save!
19
- assert Postal::Member.new("john.doe#{rand(1000000)}@anonymous.com", '', @config['list_name']).save # create member with no name
20
- assert Postal::Member.new("john.doe#{rand(1000000)}@anonymous.com", '', @config['list_name']).save! # create member with no name
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",@config['list_name'])
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",@config['list_name'])
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", @config['list_name'])
33
- assert Postal::Member.create!("john.doe#{rand(1000000)}@anonymous.com","John Doe", @config['list_name'])
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", @config['list_name'])
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", @config['list_name'], :field_0 => 'Baseball', :field_1 => 'Male')
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", @config['list_name'])
47
- assert Postal::Member.find(new_member.id, @config['list_name'])
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", @config['list_name'])
52
- assert Postal::Member.find(new_member.email, @config['list_name'])
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", @config['list_name'])
57
- assert Postal::Member.find_by_filter(["ListName=#{@config['list_name']}",'EmailAddress like john.doe%'])
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", @config['list_name'])
62
- assert Postal::Member.find(new_member.email, @config['list_name'])
63
- Postal::Member.destroy(["ListName=#{@config['list_name']}","EmailAddress like john.doe-delete%"])
64
- assert !Postal::Member.find(new_member.email, @config['list_name'])
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(["ListName=#{@config['list_name']}",'EmailAddress like john.doe%'])
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.0
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.2.0
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