mail_male_mail 0.0.2 → 0.0.3
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/lib/mail_male_mail.rb +7 -3
- data/lib/mail_male_mail/postal_service/delivery_method.rb +52 -0
- data/lib/mail_male_mail/postal_service/mailer.rb +14 -0
- data/lib/mail_male_mail/version.rb +1 -1
- data/spec/config/mail_male_mail.yml +3 -1
- data/spec/mail_male_mail/mailgun_spec.rb +4 -4
- data/spec/mail_male_mail/postal_service/mailer_spec.rb +23 -0
- data/spec/mail_male_mail/sendgrid_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -0
- metadata +6 -2
data/lib/mail_male_mail.rb
CHANGED
@@ -4,9 +4,11 @@ require "action_mailer"
|
|
4
4
|
require "mail_male_mail/sendgrid"
|
5
5
|
require "mail_male_mail/mailgun"
|
6
6
|
require "mail_male_mail/configuration"
|
7
|
+
require "mail_male_mail/postal_service/delivery_method"
|
8
|
+
require "mail_male_mail/postal_service/mailer"
|
7
9
|
|
8
10
|
module MailMaleMail
|
9
|
-
PROVIDERS = %w(sendgrid mailgun)
|
11
|
+
PROVIDERS = %w(sendgrid mailgun postal_service)
|
10
12
|
|
11
13
|
if defined? Rails::Railtie
|
12
14
|
class MailMaleMailRailtie < Rails::Railtie
|
@@ -15,6 +17,7 @@ module MailMaleMail
|
|
15
17
|
raise LoadError, "#{MailMaleMail::Configuration.filepath} is required for MailMaleMail and does not exist"
|
16
18
|
end
|
17
19
|
ActionMailer::Base.send(:include, MailMaleMail)
|
20
|
+
ActionMailer::Base.add_delivery_method :postal_service, MailMaleMail::PostalService::DeliveryMethod, {}
|
18
21
|
end
|
19
22
|
end
|
20
23
|
end
|
@@ -25,6 +28,7 @@ module MailMaleMail
|
|
25
28
|
Configuration.load
|
26
29
|
include(Sendgrid)
|
27
30
|
include(Mailgun)
|
31
|
+
include(PostalService::Mailer)
|
28
32
|
class << self
|
29
33
|
attr_accessor :mmm_provider
|
30
34
|
end
|
@@ -57,8 +61,8 @@ module MailMaleMail
|
|
57
61
|
def mailman(name)
|
58
62
|
if config = Configuration.get(name)
|
59
63
|
self.delivery_method = config['delivery_method'].to_sym if config.key?('delivery_method')
|
60
|
-
if config.key?(
|
61
|
-
self.
|
64
|
+
if config.key?("#{self.delivery_method}_settings") && config["#{self.delivery_method}_settings"].is_a?(Hash)
|
65
|
+
self.send("#{self.delivery_method}_settings=", config["#{self.delivery_method}_settings"].symbolize_keys)
|
62
66
|
end
|
63
67
|
if config.key?('provider') && PROVIDERS.include?(config['provider'])
|
64
68
|
self.mmm_provider = config['provider']
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module MailMaleMail
|
2
|
+
module PostalService
|
3
|
+
def self.api_request(settings, message)
|
4
|
+
if settings[:method].to_s == "iron_mq"
|
5
|
+
queue = IronMQ::Client.new(token: settings[:token], project_id: settings[:project_id]).queue(settings[:queue])
|
6
|
+
queue.post(message.to_json)
|
7
|
+
else
|
8
|
+
uri = URI(url)
|
9
|
+
req = Net::HTTP::Post.new("#{uri.path}?#{uri.query}")
|
10
|
+
req.body = message.to_json
|
11
|
+
req.content_type = 'application/json'
|
12
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
13
|
+
response = http.request(req)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
class DeliveryMethod
|
17
|
+
class InvalidOption < StandardError; end
|
18
|
+
|
19
|
+
attr_accessor :settings
|
20
|
+
def initialize(options = {})
|
21
|
+
unless options[:url].present? || options[:method].present?
|
22
|
+
raise InvalidOption, "A url or method option is required to send email using the Postal Service delivery method"
|
23
|
+
end
|
24
|
+
self.settings = options
|
25
|
+
end
|
26
|
+
def deliver!(mail)
|
27
|
+
message = {}
|
28
|
+
message[:to] = mail.to.join(", ")
|
29
|
+
message[:subject] = mail.subject.to_s
|
30
|
+
message[:from] = mail.from.first.to_s
|
31
|
+
message[:extra_provider_data] = ActiveSupport::JSON.decode(mail.header['X-PostalService-Data'].to_s) if mail.header['X-PostalService-Data']
|
32
|
+
if mail.header['X-PostalService-Provider']
|
33
|
+
message[:provider] = mail.header['X-PostalService-Provider'].to_s
|
34
|
+
elsif self.settings[:provider]
|
35
|
+
message[:provider] = self.settings[:provider]
|
36
|
+
end
|
37
|
+
|
38
|
+
message[:category] = mail.header['X-PostalService-Category'].to_s if mail.header['X-PostalService-Category']
|
39
|
+
|
40
|
+
message[:text] = mail.text_part.body.to_s if mail.text_part
|
41
|
+
message[:html] = mail.html_part.body.to_s if mail.html_part
|
42
|
+
unless mail.text_part || mail.html_part
|
43
|
+
part = mail.content_type =~ /html/ ? :html : :text
|
44
|
+
message[part] = mail.body.to_s
|
45
|
+
end
|
46
|
+
MailMaleMail::PostalService.api_request(self.settings, message)
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module MailMaleMail
|
2
|
+
module PostalService
|
3
|
+
module Mailer
|
4
|
+
def write_postal_service_headers
|
5
|
+
if mmm_category == :use_subject_lines
|
6
|
+
self.headers['X-PostalService-Category'] = message.subject
|
7
|
+
elsif mmm_category
|
8
|
+
self.headers['X-PostalService-Category'] = mmm_category
|
9
|
+
end
|
10
|
+
self.headers['X-PostalService-Data'] = mmm_variables.to_json.gsub(/(["\]}])([,:])(["\[{])/, '\\1\\2 \\3') if mmm_variables
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -3,15 +3,15 @@ require 'spec_helper'
|
|
3
3
|
class MMMMailgunMailer < MMMailer
|
4
4
|
mailman :mailgun
|
5
5
|
def test_mail
|
6
|
-
|
7
|
-
|
6
|
+
mail_male_mail_category("MailgunCategory1")
|
7
|
+
mail_male_mail_variables(:color => "green", :sound => "bark")
|
8
8
|
mail(:subject => "Mailgun Testing", :from => "test@example.com", :to => "test2@example.com")
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
12
|
module MailMaleMail
|
13
|
-
describe
|
14
|
-
it "should set the
|
13
|
+
describe Mailgun do
|
14
|
+
it "should set the mailgun headers with tag and variables" do
|
15
15
|
mail = MMMMailgunMailer.test_mail
|
16
16
|
mail.header['X-Mailgun-Tag'].to_s.should == "MailgunCategory1"
|
17
17
|
mail.header['X-Mailgun-Variables'].to_s.should == "{\"color\": \"green\", \"sound\": \"bark\"}"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class MMMPostalServiceMailer < MMMailer
|
4
|
+
mailman :postal_service
|
5
|
+
def test_mail
|
6
|
+
mail_male_mail_category("PostalServiceCategory1")
|
7
|
+
mail_male_mail_variables(:color => "yellow", :sound => "moo")
|
8
|
+
mail(:subject => "PostalService Testing", :from => "test@example.com", :to => "test2@example.com")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module MailMaleMail
|
13
|
+
module PostalService
|
14
|
+
describe Mailer do
|
15
|
+
it "should set the postal service headers for category and data" do
|
16
|
+
mail = MMMPostalServiceMailer.test_mail
|
17
|
+
mail.header['X-PostalService-Category'].to_s.should == "PostalServiceCategory1"
|
18
|
+
mail.header['X-PostalService-Data'].to_s.should == "{\"color\": \"yellow\", \"sound\": \"moo\"}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
class MMMSendGridMailer < MMMailer
|
4
4
|
mailman :sendgrid
|
5
5
|
def test_mail
|
6
|
-
|
7
|
-
|
6
|
+
mail_male_mail_category("SendgridCategory1")
|
7
|
+
mail_male_mail_variables(:color => "blue", sound: "meow")
|
8
8
|
mail(:subject => "Sengrid Testing", :from => "test@example.com", :to => "test2@example.com")
|
9
9
|
end
|
10
10
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -13,6 +13,7 @@ end
|
|
13
13
|
|
14
14
|
require "mail_male_mail"
|
15
15
|
ActionMailer::Base.send(:include, MailMaleMail)
|
16
|
+
ActionMailer::Base.add_delivery_method :postal_service, MailMaleMail::PostalService::DeliveryMethod, {:url => "http://example.com"}
|
16
17
|
class MMMailer < ActionMailer::Base
|
17
18
|
end
|
18
19
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mail_male_mail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionmailer
|
@@ -74,11 +74,14 @@ files:
|
|
74
74
|
- lib/mail_male_mail.rb
|
75
75
|
- lib/mail_male_mail/configuration.rb
|
76
76
|
- lib/mail_male_mail/mailgun.rb
|
77
|
+
- lib/mail_male_mail/postal_service/delivery_method.rb
|
78
|
+
- lib/mail_male_mail/postal_service/mailer.rb
|
77
79
|
- lib/mail_male_mail/sendgrid.rb
|
78
80
|
- lib/mail_male_mail/version.rb
|
79
81
|
- mail_male_mail.gemspec
|
80
82
|
- spec/config/mail_male_mail.yml
|
81
83
|
- spec/mail_male_mail/mailgun_spec.rb
|
84
|
+
- spec/mail_male_mail/postal_service/mailer_spec.rb
|
82
85
|
- spec/mail_male_mail/sendgrid_spec.rb
|
83
86
|
- spec/mail_male_mail_spec.rb
|
84
87
|
- spec/spec_helper.rb
|
@@ -109,6 +112,7 @@ summary: extend actionmailer to work with multiple mail providers
|
|
109
112
|
test_files:
|
110
113
|
- spec/config/mail_male_mail.yml
|
111
114
|
- spec/mail_male_mail/mailgun_spec.rb
|
115
|
+
- spec/mail_male_mail/postal_service/mailer_spec.rb
|
112
116
|
- spec/mail_male_mail/sendgrid_spec.rb
|
113
117
|
- spec/mail_male_mail_spec.rb
|
114
118
|
- spec/spec_helper.rb
|