mailchimp 0.0.6.alpha → 0.0.7.alpha
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/CONTRIBUTORS.markdown +1 -0
- data/README-mandrill.markdown +23 -0
- data/lib/mailchimp/api.rb +1 -3
- data/lib/mailchimp/base.rb +1 -3
- data/lib/mailchimp/handlers/mandrill_delivery_handler.rb +29 -23
- data/lib/mailchimp/mandrill.rb +1 -3
- data/lib/mailchimp/sts.rb +2 -4
- data/lib/mailchimp/version.rb +1 -1
- data/test/test_helper.rb +22 -1
- data/test/unit/handlers/mandrill_deliver_handler_test.rb +23 -0
- metadata +18 -16
data/CONTRIBUTORS.markdown
CHANGED
data/README-mandrill.markdown
CHANGED
@@ -62,3 +62,26 @@ You can tell ActionMailer to send mail using Mandrill by adding the follow to to
|
|
62
62
|
|
63
63
|
These setting will allow you to use ActionMailer as you normally would, any calls to mail() will be sent using Mandrill
|
64
64
|
|
65
|
+
If your application will specify the API Key on a per email basis, you can configure your application like so:
|
66
|
+
|
67
|
+
config.action_mailer.delivery_method = :mailchimp_mandrill
|
68
|
+
config.action_mailer.mailchimp_mandrill_settings = {
|
69
|
+
:track_clicks => true,
|
70
|
+
:track_opens => true,
|
71
|
+
:from_name => "Change Me"
|
72
|
+
}
|
73
|
+
|
74
|
+
Once this is specified, be sure to include the api_key in ActionMailer.mail()'s options:
|
75
|
+
|
76
|
+
class ExampleMailer < ActionMailer::Base
|
77
|
+
default from: "no-reply@example.com"
|
78
|
+
|
79
|
+
def test_email(object_with_api_key)
|
80
|
+
|
81
|
+
mail(to: object_with_api_key.email,
|
82
|
+
subject: "This is an example Mandrill Email",
|
83
|
+
api_key: object_with_api_key.api_key)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
And the Mandrill Delivery Hander will read the api key from the email message object, instead of the application configuration
|
data/lib/mailchimp/api.rb
CHANGED
@@ -49,9 +49,7 @@ module Mailchimp
|
|
49
49
|
def method_missing(method, *args)
|
50
50
|
method = method.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } #Thanks for the gsub, Rails
|
51
51
|
method = method[0].chr.downcase + method[1..-1].gsub(/aim$/i, 'AIM')
|
52
|
-
|
53
|
-
args = args[0] if args.is_a?(Array)
|
54
|
-
call(method, args)
|
52
|
+
call(method, *args)
|
55
53
|
end
|
56
54
|
|
57
55
|
class << self
|
data/lib/mailchimp/base.rb
CHANGED
@@ -47,9 +47,7 @@ module Mailchimp
|
|
47
47
|
def method_missing(method, *args)
|
48
48
|
method = method.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } #Thanks for the gsub, Rails
|
49
49
|
method = method[0].chr.downcase + method[1..-1].gsub(/aim$/i, 'AIM')
|
50
|
-
|
51
|
-
args = args[0] if args.is_a?(Array)
|
52
|
-
call(method, args)
|
50
|
+
call(method, *args)
|
53
51
|
end
|
54
52
|
|
55
53
|
private
|
@@ -1,14 +1,13 @@
|
|
1
|
-
require 'action_mailer'
|
2
|
-
|
3
1
|
module Mailchimp
|
4
2
|
class MandrillDeliveryHandler
|
5
3
|
attr_accessor :settings
|
6
4
|
|
7
|
-
def initialize
|
8
|
-
self.settings = {:track_opens => true, :track_clicks => true}.merge(options)
|
5
|
+
def initialize(options = {})
|
6
|
+
self.settings = {:track_opens => true, :track_clicks => true, :from_name => 'Mandrill Email Delivery Handler'}.merge(options)
|
9
7
|
end
|
10
8
|
|
11
|
-
def deliver!
|
9
|
+
def deliver!(message)
|
10
|
+
|
12
11
|
message_payload = {
|
13
12
|
:track_opens => settings[:track_opens],
|
14
13
|
:track_clicks => settings[:track_clicks],
|
@@ -16,32 +15,39 @@ module Mailchimp
|
|
16
15
|
:subject => message.subject,
|
17
16
|
:from_name => settings[:from_name],
|
18
17
|
:from_email => message.from.first,
|
19
|
-
:
|
18
|
+
:to => message.to
|
20
19
|
}
|
21
20
|
}
|
22
21
|
|
23
|
-
mime_types = {
|
24
|
-
:html => "text/html",
|
25
|
-
:text => "text/plain"
|
26
|
-
}
|
27
|
-
|
28
|
-
get_content_for = lambda do |format|
|
29
|
-
content = message.send(:"#{format}_part")
|
30
|
-
content ||= message if message.content_type =~ %r{#{mime_types[format]}}
|
31
|
-
content
|
32
|
-
end
|
33
|
-
|
34
22
|
[:html, :text].each do |format|
|
35
|
-
content = get_content_for
|
36
|
-
message_payload[:message][format] = content
|
23
|
+
content = get_content_for(message, format)
|
24
|
+
message_payload[:message][format] = content if content
|
37
25
|
end
|
38
26
|
|
39
27
|
message_payload[:tags] = settings[:tags] if settings[:tags]
|
40
|
-
|
41
|
-
|
28
|
+
|
29
|
+
api_key = message.header['api-key'].blank? ? settings[:api_key] : message.header['api-key']
|
30
|
+
|
31
|
+
Mailchimp::Mandrill.new(api_key).messages_send(message_payload)
|
42
32
|
end
|
43
|
-
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def get_content_for(message, format)
|
37
|
+
mime_types = {
|
38
|
+
:html => "text/html",
|
39
|
+
:text => "text/plain"
|
40
|
+
}
|
41
|
+
|
42
|
+
content = message.send(:"#{format.to_s}_part")
|
43
|
+
content ||= message.body if message.mime_type == mime_types[format]
|
44
|
+
content
|
45
|
+
end
|
46
|
+
|
44
47
|
end
|
45
48
|
end
|
46
49
|
|
47
|
-
ActionMailer
|
50
|
+
if defined?(ActionMailer)
|
51
|
+
ActionMailer::Base.add_delivery_method(:mailchimp_mandrill, Mailchimp::MandrillDeliveryHandler)
|
52
|
+
end
|
53
|
+
|
data/lib/mailchimp/mandrill.rb
CHANGED
@@ -27,9 +27,7 @@ module Mailchimp
|
|
27
27
|
def method_missing(method, *args)
|
28
28
|
match = method.to_s.match(/([a-z]*)_([a-z]*)_?([a-z]*)/)
|
29
29
|
method = "#{match[1]}/#{match[2]}#{match[3] == '' ? "" : "-"+match[3]}"
|
30
|
-
|
31
|
-
args = args[0] if (args.class.to_s == "Array")
|
32
|
-
call(method, args)
|
30
|
+
call(method, *args)
|
33
31
|
end
|
34
32
|
|
35
33
|
|
data/lib/mailchimp/sts.rb
CHANGED
@@ -20,9 +20,7 @@ module Mailchimp
|
|
20
20
|
|
21
21
|
def method_missing(method, *args)
|
22
22
|
method = method.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } #Thanks for the gsub, Rails
|
23
|
-
|
24
|
-
args = args[0] if (args.class.to_s == "Array")
|
25
|
-
call(method, args)
|
23
|
+
call(method, *args)
|
26
24
|
end
|
27
25
|
|
28
26
|
class << self
|
@@ -39,4 +37,4 @@ module Mailchimp
|
|
39
37
|
"https://#{dc_from_api_key}sts.mailchimp.com/1.0/"
|
40
38
|
end
|
41
39
|
end
|
42
|
-
end
|
40
|
+
end
|
data/lib/mailchimp/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -19,4 +19,25 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
19
19
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
20
20
|
require 'mailchimp'
|
21
21
|
|
22
|
-
FakeWeb.allow_net_connect = false
|
22
|
+
FakeWeb.allow_net_connect = false
|
23
|
+
|
24
|
+
def mock_mail_message(options = {})
|
25
|
+
subject = options.fetch(:subject) { 'Subject' }
|
26
|
+
from = [ options.fetch(:from) { 'foo@bar.com' } ]
|
27
|
+
to = [ options.fetch(:to) {'foo@bar.com'} ]
|
28
|
+
body = options.fetch(:body) { 'foo@bar.com has moved use awesome@awesomesauce.com now' }
|
29
|
+
|
30
|
+
message = mock('Mail::Message')
|
31
|
+
message.stubs(:subject).returns(subject)
|
32
|
+
message.stubs(:date).returns(Date.today)
|
33
|
+
message.stubs(:from).returns(from)
|
34
|
+
message.stubs(:to).returns(to)
|
35
|
+
message.stubs(:body).returns(body)
|
36
|
+
message.stubs(:header).returns('')
|
37
|
+
message.stubs(:multipart?).returns(false)
|
38
|
+
message.stubs(:mime_type).returns('text/html')
|
39
|
+
message.stubs(:html_part).returns(nil)
|
40
|
+
message.stubs(:text_part).returns(nil)
|
41
|
+
|
42
|
+
message
|
43
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require File.join('./lib/mailchimp','handlers', 'mandrill_delivery_handler')
|
3
|
+
|
4
|
+
class MandrillDeliveryHandlerTest < Test::Unit::TestCase
|
5
|
+
context "when delivering a Mail::Message to the Mandrill API" do
|
6
|
+
setup do
|
7
|
+
@mandrill_delivery_handler = Mailchimp::MandrillDeliveryHandler.new
|
8
|
+
@fake_mandrill_api_response = [{"email"=>"foo@bar.com", "status"=>"sent"}]
|
9
|
+
|
10
|
+
FakeWeb.register_uri(
|
11
|
+
:post,
|
12
|
+
'http://mandrillapp.com/api/1.0/messages/send',
|
13
|
+
body: @fake_mandrill_api_response.to_json
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
should "deliver successfully" do
|
18
|
+
message = mock_mail_message
|
19
|
+
response = @mandrill_delivery_handler.deliver!(message)
|
20
|
+
assert_equal @fake_mandrill_api_response, response
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mailchimp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7.alpha
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-03-06 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
16
|
-
requirement: &
|
16
|
+
requirement: &70308507199520 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70308507199520
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: ruby-debug19
|
27
|
-
requirement: &
|
27
|
+
requirement: &70308507199020 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70308507199020
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &70308507198560 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70308507198560
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: shoulda
|
49
|
-
requirement: &
|
49
|
+
requirement: &70308507198140 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70308507198140
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: mocha
|
60
|
-
requirement: &
|
60
|
+
requirement: &70308507197640 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70308507197640
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: cover_me
|
71
|
-
requirement: &
|
71
|
+
requirement: &70308507197140 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70308507197140
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: fakeweb
|
82
|
-
requirement: &
|
82
|
+
requirement: &70308507196700 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70308507196700
|
91
91
|
description: This provides Ruby access to (eventually) all of Mailchimp's APIs
|
92
92
|
email:
|
93
93
|
- chris@highgroove.com
|
@@ -128,6 +128,7 @@ files:
|
|
128
128
|
- test/lib/mandrill_test.rb
|
129
129
|
- test/lib/sts_test.rb
|
130
130
|
- test/test_helper.rb
|
131
|
+
- test/unit/handlers/mandrill_deliver_handler_test.rb
|
131
132
|
homepage: ''
|
132
133
|
licenses: []
|
133
134
|
post_install_message:
|
@@ -163,3 +164,4 @@ test_files:
|
|
163
164
|
- test/lib/mandrill_test.rb
|
164
165
|
- test/lib/sts_test.rb
|
165
166
|
- test/test_helper.rb
|
167
|
+
- test/unit/handlers/mandrill_deliver_handler_test.rb
|