smtp_url 0.0.2 → 0.1.0
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/Gemfile.lock +24 -0
- data/Readme.md +7 -12
- data/lib/smtp_url/invalid_url_exception.rb +3 -0
- data/lib/smtp_url/parser.rb +46 -0
- data/lib/smtp_url/railtie.rb +6 -0
- data/lib/smtp_url/version.rb +3 -0
- data/lib/smtp_url.rb +4 -31
- data/smtp_url.gemspec +1 -1
- data/spec/{smtp_url_spec.rb → smtp_url/parser_spec.rb} +13 -14
- metadata +10 -5
data/Gemfile.lock
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activesupport (3.2.3)
|
5
|
+
i18n (~> 0.6)
|
6
|
+
multi_json (~> 1.0)
|
7
|
+
diff-lcs (1.1.3)
|
8
|
+
i18n (0.6.0)
|
9
|
+
multi_json (1.3.5)
|
10
|
+
rspec (2.10.0)
|
11
|
+
rspec-core (~> 2.10.0)
|
12
|
+
rspec-expectations (~> 2.10.0)
|
13
|
+
rspec-mocks (~> 2.10.0)
|
14
|
+
rspec-core (2.10.0)
|
15
|
+
rspec-expectations (2.10.0)
|
16
|
+
diff-lcs (~> 1.1.3)
|
17
|
+
rspec-mocks (2.10.1)
|
18
|
+
|
19
|
+
PLATFORMS
|
20
|
+
ruby
|
21
|
+
|
22
|
+
DEPENDENCIES
|
23
|
+
activesupport
|
24
|
+
rspec
|
data/Readme.md
CHANGED
@@ -7,18 +7,10 @@ variable.
|
|
7
7
|
|
8
8
|
## Installation
|
9
9
|
|
10
|
-
|
10
|
+
Add to your `Gemfile`:
|
11
11
|
|
12
12
|
gem "smtp_url"
|
13
13
|
|
14
|
-
Or install it directly onto your system with rubygems:
|
15
|
-
|
16
|
-
gem install smtp_url
|
17
|
-
|
18
|
-
Then require in your app:
|
19
|
-
|
20
|
-
require "smtp_url"
|
21
|
-
|
22
14
|
## Usage
|
23
15
|
|
24
16
|
Use a URL like so:
|
@@ -37,10 +29,13 @@ Set the URL in an enviroment variable in your server setup:
|
|
37
29
|
|
38
30
|
export SMTP_URL=smtp://user:secret@mailserver:587/?domain=test.com
|
39
31
|
|
40
|
-
|
32
|
+
## Development
|
33
|
+
|
34
|
+
Can be very useful in development when paired with something like
|
35
|
+
[Mailcatcher](http://mailcatcher.me/):
|
36
|
+
|
37
|
+
export SMTP_URL=smtp://127.0.0.1:1025
|
41
38
|
|
42
|
-
config.action_mailer.delivery_method = :smtp
|
43
|
-
config.action_mailer.smtp_settings = SmtpURL.parse ENV["SMTP_URL"]
|
44
39
|
|
45
40
|
## License
|
46
41
|
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'active_support/core_ext/object/try'
|
3
|
+
require 'active_support/core_ext/hash/keys'
|
4
|
+
|
5
|
+
module SmtpURL
|
6
|
+
class Parser
|
7
|
+
|
8
|
+
def initialize(url)
|
9
|
+
@url = url
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse
|
13
|
+
config = parse_url
|
14
|
+
query = split_query_params(config.query)
|
15
|
+
settings = build_hash(config, query)
|
16
|
+
settings.reject!{ |key,value| value.nil? }
|
17
|
+
settings
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def parse_url
|
23
|
+
parsed_url = URI.parse(@url)
|
24
|
+
raise InvalidUrlException, "Improper format of SMTP_URL env var, must be smtp://" unless parsed_url.scheme == 'smtp'
|
25
|
+
parsed_url
|
26
|
+
rescue URI::InvalidURIError => e
|
27
|
+
raise InvalidUrlException, "Could not parse SMTP_URL env var"
|
28
|
+
end
|
29
|
+
|
30
|
+
def build_hash(config, query)
|
31
|
+
{
|
32
|
+
:address => config.host,
|
33
|
+
:port => config.port || 25,
|
34
|
+
:domain => query[:domain],
|
35
|
+
:user_name => config.user,
|
36
|
+
:password => config.password,
|
37
|
+
:authentication => query[:authentication].try(:to_sym)
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
def split_query_params(query = nil)
|
42
|
+
return {} unless query
|
43
|
+
Hash[query.split("&").map{ |pair| pair.split("=") }].symbolize_keys
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/smtp_url.rb
CHANGED
@@ -1,31 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
require '
|
4
|
-
|
5
|
-
module SmtpURL
|
6
|
-
VERSION = '0.0.2'
|
7
|
-
|
8
|
-
def self.parse(uri)
|
9
|
-
config = URI.parse(uri)
|
10
|
-
return {} if config.scheme != 'smtp'
|
11
|
-
query_params = split_query_params(config.query)
|
12
|
-
settings = { :address => config.host,
|
13
|
-
:port => config.port || 25,
|
14
|
-
:domain => query_params[:domain],
|
15
|
-
:user_name => config.user,
|
16
|
-
:password => config.password,
|
17
|
-
:authentication => query_params[:authentication].try(:to_sym)
|
18
|
-
}
|
19
|
-
settings.reject!{ |key,value| value.nil? }
|
20
|
-
settings
|
21
|
-
rescue URI::InvalidURIError
|
22
|
-
return {}
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
def self.split_query_params(query = nil)
|
27
|
-
return {} unless query
|
28
|
-
Hash[query.split("&").map{ |pair| pair.split("=") }].symbolize_keys
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
1
|
+
require 'smtp_url/version'
|
2
|
+
require 'smtp_url/invalid_url_exception'
|
3
|
+
require 'smtp_url/parser'
|
4
|
+
require 'smtp_url/railtie' if defined?(Rails)
|
data/smtp_url.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Daniel Farrell"]
|
10
10
|
s.email = ["danielfarrell76@gmail.com"]
|
11
|
-
s.homepage = ""
|
11
|
+
s.homepage = "https://github.com/danielfarrell/smtp_url"
|
12
12
|
s.summary = %q{Convert an smtp url into mail/action mailer friendly hashes}
|
13
13
|
s.description = %q{Allows smtp settings to be defined as URL in environment variable, then converted to hash for use in Mail/ActionMailer}
|
14
14
|
s.files = `git ls-files`.split("\n")
|
@@ -1,21 +1,22 @@
|
|
1
|
-
require 'smtp_url'
|
1
|
+
require 'smtp_url/invalid_url_exception'
|
2
|
+
require 'smtp_url/parser'
|
2
3
|
|
3
|
-
describe SmtpURL, '#parse' do
|
4
|
+
describe SmtpURL::Parser, '#parse' do
|
4
5
|
it "should set port to 25 is not in url" do
|
5
6
|
url = "smtp://test.com"
|
6
|
-
settings = SmtpURL.parse
|
7
|
+
settings = SmtpURL::Parser.new(url).parse
|
7
8
|
settings[:port].should eq(25)
|
8
9
|
end
|
9
10
|
|
10
11
|
it "should allow setting port" do
|
11
12
|
url = "smtp://test.com:587"
|
12
|
-
settings = SmtpURL.parse
|
13
|
+
settings = SmtpURL::Parser.new(url).parse
|
13
14
|
settings[:port].should eq(587)
|
14
15
|
end
|
15
16
|
|
16
17
|
it "should handle urls without authentication" do
|
17
18
|
url = "smtp://test.com"
|
18
|
-
settings = SmtpURL.parse
|
19
|
+
settings = SmtpURL::Parser.new(url).parse
|
19
20
|
settings[:address].should eq('test.com')
|
20
21
|
settings[:user_name].should eq(nil)
|
21
22
|
settings[:passsword].should eq(nil)
|
@@ -23,7 +24,7 @@ describe SmtpURL, '#parse' do
|
|
23
24
|
|
24
25
|
it "should handle urls with authentication" do
|
25
26
|
url = "smtp://user:secret@test.com"
|
26
|
-
settings = SmtpURL.parse
|
27
|
+
settings = SmtpURL::Parser.new(url).parse
|
27
28
|
settings[:address].should eq('test.com')
|
28
29
|
settings[:user_name].should eq('user')
|
29
30
|
settings[:password].should eq('secret')
|
@@ -31,27 +32,25 @@ describe SmtpURL, '#parse' do
|
|
31
32
|
|
32
33
|
it "should parse domain from query params" do
|
33
34
|
url = "smtp://test.com/?domain=test2.com"
|
34
|
-
settings = SmtpURL.parse
|
35
|
+
settings = SmtpURL::Parser.new(url).parse
|
35
36
|
settings[:domain].should eq('test2.com')
|
36
37
|
end
|
37
38
|
|
38
39
|
it "should parse authentication from query params" do
|
39
40
|
url = "smtp://user:secret@test.com/?authentication=digest"
|
40
|
-
settings = SmtpURL.parse
|
41
|
+
settings = SmtpURL::Parser.new(url).parse
|
41
42
|
settings[:user_name].should eq('user')
|
42
43
|
settings[:password].should eq('secret')
|
43
44
|
settings[:authentication].should eq(:digest)
|
44
45
|
end
|
45
46
|
|
46
|
-
it "should
|
47
|
+
it "should raise InvalidUriException for invalid url" do
|
47
48
|
url = "just a string of stuff"
|
48
|
-
|
49
|
-
settings.should eq({})
|
49
|
+
lambda {SmtpURL::Parser.new(url).parse}.should raise_error(SmtpURL::InvalidUrlException, "Could not parse SMTP_URL env var")
|
50
50
|
end
|
51
51
|
|
52
|
-
it "should
|
52
|
+
it "should raise InvalidUriException if url is not smtp" do
|
53
53
|
url = "http://test.com"
|
54
|
-
|
55
|
-
settings.should eq({})
|
54
|
+
lambda {SmtpURL::Parser.new(url).parse}.should raise_error(SmtpURL::InvalidUrlException, "Improper format of SMTP_URL env var, must be smtp://")
|
56
55
|
end
|
57
56
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smtp_url
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
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: 2012-
|
12
|
+
date: 2012-06-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -36,11 +36,16 @@ extensions: []
|
|
36
36
|
extra_rdoc_files: []
|
37
37
|
files:
|
38
38
|
- Gemfile
|
39
|
+
- Gemfile.lock
|
39
40
|
- Readme.md
|
40
41
|
- lib/smtp_url.rb
|
42
|
+
- lib/smtp_url/invalid_url_exception.rb
|
43
|
+
- lib/smtp_url/parser.rb
|
44
|
+
- lib/smtp_url/railtie.rb
|
45
|
+
- lib/smtp_url/version.rb
|
41
46
|
- smtp_url.gemspec
|
42
|
-
- spec/
|
43
|
-
homepage:
|
47
|
+
- spec/smtp_url/parser_spec.rb
|
48
|
+
homepage: https://github.com/danielfarrell/smtp_url
|
44
49
|
licenses: []
|
45
50
|
post_install_message:
|
46
51
|
rdoc_options: []
|
@@ -65,4 +70,4 @@ signing_key:
|
|
65
70
|
specification_version: 3
|
66
71
|
summary: Convert an smtp url into mail/action mailer friendly hashes
|
67
72
|
test_files:
|
68
|
-
- spec/
|
73
|
+
- spec/smtp_url/parser_spec.rb
|