http_mailer 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b12f95a1a164c385317f44782c9bddd404f68c3c
4
- data.tar.gz: a876c7adab1bc789cafb57bd70b79f065bbed8eb
3
+ metadata.gz: bb960b319971c84288901f6242b8b7e9ede0caf3
4
+ data.tar.gz: 42033f95265ad6afb618e5152b03d0ca09a5b689
5
5
  SHA512:
6
- metadata.gz: 91ea1abd78d90b3e2321cb233e94e459e289ba838302511d3be4f5ffd5d747ad2edfa725fc25da9766f80ebefb6ed1c688346ab863d9a6840a310baa24a64376
7
- data.tar.gz: c9ea884fba506e34c1e5c3346fe7cc6a7e33b9b40d82cae241e4de6dd1e23f77f3f0e20fc901217eca2889b0d8f7e1fe21ef8a514ddb342b2b126e2ca08c2142
6
+ metadata.gz: 0553e51355e8f429873706facbd84ff5edfa5c3038981ebe9b614893b39b93339b0dc78dab7b5ef394e1d6547c3e014cb6b0ce9c64b1340975fc3f5305ddfdc3
7
+ data.tar.gz: 1ea8d630febe20b7f11afcc0b08fc1671e7fc928c66e3d5ad11f054a2e426288a1aed9e75858e7e8895a8ed8955a1a45bfa83f58e7bf9a96a90d9a765a3df443
data/lib/http_mailer.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rest_client'
2
2
  require "http_mailer/version"
3
+ require "http_mailer/client"
3
4
  require "http_mailer/service_handler"
4
5
  require "http_mailer/service_configuration"
5
6
  require "http_mailer/mailgun/mailgun_service_api"
@@ -13,16 +14,9 @@ require "http_mailer/sendgrid/sendgrid_service_handler"
13
14
  module HttpMailer
14
15
 
15
16
  class << self
16
- def mailgun(settings)
17
- MailgunServiceHandler.new(settings)
18
- end
19
-
20
- def sendgrid(settings)
21
- SendGridServiceHandler.new(settings)
22
- end
23
-
24
- def mandrill(settings)
25
- MandrillServiceHandler.new(settings)
17
+ def client(settings)
18
+ HttpMailer::Client.new(settings)
26
19
  end
27
20
  end
21
+
28
22
  end
@@ -0,0 +1,29 @@
1
+ module HttpMailer
2
+ class Client
3
+ attr_reader :configuration, :mailgun, :sendgrid, :mandrill
4
+
5
+ def initialize(settings)
6
+ configure(settings)
7
+ end
8
+
9
+ def configure(settings)
10
+ @mailgun = MailgunServiceHandler.new(settings[:mailgun])
11
+ @sendgrid = SendGridServiceHandler.new(settings[:sendgrid])
12
+ @mandrill = MandrillServiceHandler.new(settings[:mandrill])
13
+ end
14
+
15
+ def send_message(from, to, subject, body, from_name='', to_name='')
16
+ response = nil
17
+
18
+ [mailgun, sendgrid, mandrill].each do |service|
19
+ if service.configured?
20
+ response = service.send_message(from, to, subject, body, to_name, from_name)
21
+ break if response.code == 200
22
+ end
23
+ end
24
+
25
+ return response
26
+ end
27
+
28
+ end
29
+ end
@@ -10,7 +10,11 @@ module HttpMailer
10
10
  )
11
11
  end
12
12
 
13
- def send_message(from, to, subject, text)
13
+ def configured?
14
+ super && !self.service_configuration.settings.subdomain.nil?
15
+ end
16
+
17
+ def send_message(from, to, subject, text, from_name='', to_name='')
14
18
  ::RestClient.post self.service_api.send_messages_url,
15
19
  :from => from,
16
20
  :to => to,
@@ -3,7 +3,7 @@ module HttpMailer
3
3
  attr_accessor :to, :to_name, :from, :from_name, :subject, :text, :html
4
4
  attr_reader :structure
5
5
 
6
- def initialize(to, from, subject, text=nil, html=nil, to_name=nil, from_name=nil)
6
+ def initialize(from, to, subject, text=nil, html=nil, from_name=nil, to_name=nil)
7
7
  @to = to
8
8
  @from = from
9
9
  @subject = subject
@@ -7,8 +7,8 @@ module HttpMailer
7
7
  @service_api = ::HttpMailer::MandrillServiceApi.new(self.service_configuration.settings.host)
8
8
  end
9
9
 
10
- def send_message(from, to, subject, text, to_name='', from_name='')
11
- message = MandrillMessage.new(from, to, subject, text, nil, to_name, from_name)
10
+ def send_message(from, to, subject, text, from_name='', to_name='')
11
+ message = MandrillMessage.new(from, to, subject, text, nil, from_name, to_name)
12
12
  payload = {
13
13
  :key => self.service_configuration.settings.api_key,
14
14
  :message => message.to_h
@@ -7,7 +7,7 @@ module HttpMailer
7
7
  @service_api = ::HttpMailer::SendGridServiceApi.new(self.service_configuration.settings.host)
8
8
  end
9
9
 
10
- def send_message(from, to, subject, text, to_name='', from_name='')
10
+ def send_message(from, to, subject, text, from_name='', to_name='')
11
11
  ::RestClient.post self.service_api.send_messages_url,
12
12
  :api_user => self.service_configuration.settings.api_user,
13
13
  :api_key => self.service_configuration.settings.api_key,
@@ -6,5 +6,10 @@ module HttpMailer
6
6
  @service_configuration = ServiceConfiguration.new(settings)
7
7
  end
8
8
 
9
+ def configured?
10
+ !self.service_configuration.settings.host.nil? &&
11
+ !self.service_configuration.settings.api_key.nil?
12
+ end
13
+
9
14
  end
10
15
  end
@@ -1,3 +1,3 @@
1
1
  module HttpMailer
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe HttpMailer::Client do
4
+
5
+ context "when configured" do
6
+ let(:settings){ {:mailgun => {:host => "api.mailgun.net", :api_key => "12345", :subdomain => "sandbox12345.mailgun.org"},
7
+ :sendgrid => {:host => "sendgrid.com", :api_user=> "test", :api_key => "1234"},
8
+ :mandrill => {:host => "mandrillapp.com", :api_key => "1234567890"}} }
9
+
10
+ describe "#initialize" do
11
+ it "creates a client instance" do
12
+ expect(HttpMailer::Client.new(settings)).to be_a HttpMailer::Client
13
+ end
14
+ end
15
+
16
+ describe '#send_message' do
17
+ let(:settings){ {:mailgun => {:host => "api.mailgun.net", :api_key => "12345", :subdomain => "sandbox12345.mailgun.org"},
18
+ :sendgrid => {:host => "sendgrid.com", :api_user=> "test", :api_key => "1234"},
19
+ :mandrill => {:host => "mandrillapp.com", :api_key => "1234567890"}} }
20
+ let(:mailer_client){ HttpMailer::Client.new(settings) }
21
+
22
+ let(:sender){ "sender@test.com"}
23
+ let(:reciever){ "reciever@test.com>" }
24
+ let(:subject){ "Hello" }
25
+ let(:email_body){ "Congratulations, you just sent an email with HttpMailer! You are truly awesome!" }
26
+
27
+ it 'sends an email' do
28
+ response = mailer_client.send_message(sender, reciever, subject, email_body)
29
+ expect(response.code).to eq(200)
30
+ end
31
+ end
32
+ end
33
+
34
+ end
@@ -2,33 +2,14 @@ require 'spec_helper'
2
2
 
3
3
  describe HttpMailer do
4
4
 
5
- context "when configured for Mailgun" do
6
- let(:settings){ {:host => "api.mailgun.net", :api_key => "12345", :subdomain => "sandbox12345.mailgun.org"} }
7
-
8
- describe ".mailgun" do
9
- it "creates a service handler for Mailgun" do
10
- expect(HttpMailer.mailgun(settings)).to be_a HttpMailer::MailgunServiceHandler
11
- end
12
- end
13
- end
14
-
15
- context "when configured for SendGrid" do
16
- let(:settings){ {:host => "sendgrid.com", :api_user=> "test", :api_key => "1234"} }
17
-
18
- describe ".sendgrid" do
19
- it "creates a service handler for SendGrid" do
20
- expect(HttpMailer.sendgrid(settings)).to be_a HttpMailer::SendGridServiceHandler
21
- end
22
- end
23
-
24
- end
25
-
26
- context "when configured for Mandrill" do
27
- let(:settings){ {:host => "mandrillapp.com", :api_key => "1234567890"} }
28
-
29
- describe ".mandrill" do
30
- it "creates a service handler for Mandrill" do
31
- expect(HttpMailer.mandrill(settings)).to be_a HttpMailer::MandrillServiceHandler
5
+ context "when configured" do
6
+ let(:settings){ {:mailgun => {:host => "api.mailgun.net", :api_key => "12345", :subdomain => "sandbox12345.mailgun.org"},
7
+ :sendgrid => {:host => "sendgrid.com", :api_user=> "test", :api_key => "1234"},
8
+ :mandrill => {:host => "mandrillapp.com", :api_key => "1234567890"}} }
9
+
10
+ describe ".client" do
11
+ it "creates a client instance" do
12
+ expect(HttpMailer.client(settings)).to be_a HttpMailer::Client
32
13
  end
33
14
  end
34
15
  end
@@ -15,4 +15,36 @@ describe HttpMailer::MailgunServiceHandler do
15
15
  expect(response.code).to eq(200)
16
16
  end
17
17
  end
18
+
19
+ describe "#configured?" do
20
+ context "fully configured" do
21
+ let(:settings){ {:host => "api.mailgun.net", :api_key => "12345", :subdomain => "sandbox12345.mailgun.org"} }
22
+ let(:mailer){ HttpMailer::MailgunServiceHandler.new(settings) }
23
+
24
+ it 'returns true' do
25
+ expect(mailer.configured?).to be true
26
+ end
27
+ end
28
+
29
+ context "not fully configured" do
30
+ let(:no_settings){ {} }
31
+ let(:mailer_with_no_settings){ HttpMailer::MailgunServiceHandler.new(no_settings) }
32
+
33
+ let(:settings_missing_host){ {:api_key => "12345", :subdomain => "sandbox12345.mailgun.org"} }
34
+ let(:mailer_missing_host){ HttpMailer::MailgunServiceHandler.new(settings_missing_host) }
35
+
36
+ let(:settings_missing_api_key){ {:host => "api.mailgun.net", :subdomain => "sandbox12345.mailgun.org"} }
37
+ let(:mailer_missing_api_key){ HttpMailer::MailgunServiceHandler.new(settings_missing_api_key) }
38
+
39
+ let(:settings_missing_subdomain){ {:host => "api.mailgun.net", :api_key => "12345"} }
40
+ let(:mailer_missing_subdomain){ HttpMailer::MailgunServiceHandler.new(settings_missing_subdomain) }
41
+
42
+ it 'returns false' do
43
+ expect(mailer_with_no_settings.configured?).to be false
44
+ expect(mailer_missing_host.configured?).to be false
45
+ expect(mailer_missing_api_key.configured?).to be false
46
+ expect(mailer_missing_subdomain.configured?).to be false
47
+ end
48
+ end
49
+ end
18
50
  end
@@ -10,7 +10,7 @@ describe HttpMailer::MandrillMessage do
10
10
  let(:subject){ "Hello" }
11
11
  let(:text_body){ "Congratulations, you just sent an email with Mandrill! You are truly awesome!" }
12
12
  let(:html_body){ "<h1>Congratulations, you just sent an email with Mandrill! You are truly awesome!</h1>"}
13
- let(:message){ HttpMailer::MandrillMessage.new(to, from, subject, text_body, html_body, to_name, from_name) }
13
+ let(:message){ HttpMailer::MandrillMessage.new(from, to, subject, text_body, html_body, from_name, to_name) }
14
14
 
15
15
  it 'builds a propery formated Mandrill message' do
16
16
  expect(message.to_h[:to]).to eq [{:email => to, :name => to_name}]
@@ -13,8 +13,9 @@ describe HttpMailer::MandrillServiceHandler do
13
13
  let(:email_body){ "Congratulations, you just sent an email with Mandrill! You are truly awesome!" }
14
14
 
15
15
  it 'sends an email message' do
16
- response = mailer.send_message(to, from, subject, email_body, to_name, from_name)
16
+ response = mailer.send_message(from, to, subject, email_body, from_name, to_name)
17
17
  expect(response.code).to eq(200)
18
18
  end
19
19
  end
20
+
20
21
  end
@@ -15,4 +15,5 @@ describe HttpMailer::SendGridServiceHandler do
15
15
  expect(response.code).to eq(200)
16
16
  end
17
17
  end
18
+
18
19
  end
@@ -12,4 +12,32 @@ describe HttpMailer::ServiceHandler do
12
12
  end
13
13
  end
14
14
 
15
+ describe "#configured?" do
16
+ context "fully configured" do
17
+ let(:settings){ {:host => "mandrillapp.com", :api_key => "1234567890"} }
18
+ let(:mailer){ HttpMailer::ServiceHandler.new(settings) }
19
+
20
+ it 'returns true' do
21
+ expect(mailer.configured?).to be true
22
+ end
23
+ end
24
+
25
+ context "not fully configured" do
26
+ let(:no_settings){ {} }
27
+ let(:mailer_with_no_settings){ HttpMailer::ServiceHandler.new(no_settings) }
28
+
29
+ let(:settings_missing_host){ {:api_key => "1234567890"} }
30
+ let(:mailer_missing_host){ HttpMailer::ServiceHandler.new(settings_missing_host) }
31
+
32
+ let(:settings_missing_api_key){ {:host => "mandrillapp.com"} }
33
+ let(:mailer_missing_api_key){ HttpMailer::ServiceHandler.new(settings_missing_api_key) }
34
+
35
+ it 'returns false' do
36
+ expect(mailer_with_no_settings.configured?).to be false
37
+ expect(mailer_missing_host.configured?).to be false
38
+ expect(mailer_missing_api_key.configured?).to be false
39
+ end
40
+ end
41
+ end
42
+
15
43
  end
data/spec/spec_helper.rb CHANGED
@@ -12,6 +12,11 @@ RSpec.configure do |config|
12
12
  :headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate', 'Content-Length'=>'224', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Ruby'}).
13
13
  to_return(:status => 200, :body => "", :headers => {})
14
14
 
15
+ stub_request(:post, "https://api:key-12345@api.mailgun.net/v2/sandbox12345.mailgun.org/messages").
16
+ with(:body => {"from"=>"sender@test.com", "subject"=>"Hello", "text"=>"Congratulations, you just sent an email with HttpMailer! You are truly awesome!", "to"=>"reciever@test.com>"},
17
+ :headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate', 'Content-Length'=>'174', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Ruby'}).
18
+ to_return(:status => 200, :body => "", :headers => {})
19
+
15
20
  # Stub SendGrid HTTP requests
16
21
  stub_request(:post, "https://sendgrid.com/api/mail.send.json").
17
22
  with(:body => {"api_key"=>/.*/, "api_user"=>/.*/, "from"=>/.*/, "fromname"=>/.*/, "subject"=>/.*/, "text"=>/.*/, "to"=>/.*/, "toname"=>/.*/},
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_mailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dru Ibarra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-08 00:00:00.000000000 Z
11
+ date: 2014-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,7 @@ files:
94
94
  - Rakefile
95
95
  - http_mailer.gemspec
96
96
  - lib/http_mailer.rb
97
+ - lib/http_mailer/client.rb
97
98
  - lib/http_mailer/mailgun/mailgun_service_api.rb
98
99
  - lib/http_mailer/mailgun/mailgun_service_handler.rb
99
100
  - lib/http_mailer/mandrill/mandrill_message.rb
@@ -104,6 +105,7 @@ files:
104
105
  - lib/http_mailer/service_configuration.rb
105
106
  - lib/http_mailer/service_handler.rb
106
107
  - lib/http_mailer/version.rb
108
+ - spec/client_spec.rb
107
109
  - spec/http_mailer_spec.rb
108
110
  - spec/mailgun/mailgun_service_api_spec.rb
109
111
  - spec/mailgun/mailgun_service_handler_spec.rb
@@ -140,6 +142,7 @@ signing_key:
140
142
  specification_version: 4
141
143
  summary: Sends email via HTTP APIs
142
144
  test_files:
145
+ - spec/client_spec.rb
143
146
  - spec/http_mailer_spec.rb
144
147
  - spec/mailgun/mailgun_service_api_spec.rb
145
148
  - spec/mailgun/mailgun_service_handler_spec.rb