rfc-822 0.4.0 → 0.4.1
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 +4 -4
- data/lib/rfc822.rb +17 -17
- data/spec/rfc822_spec.rb +46 -44
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 31093e28dadc0e6463032bbacab6a932ff834561
|
4
|
+
data.tar.gz: d5aa904a3dc3d422e7e24d9c2573105fec52851b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 414b95c3e8c18bd877eafdb2ca7c8e4722ad48cee813806c1fba6bc7aff96a54ade491e85e93e0f7160ae6033dc0b5fa23f3e86f4349e943bf004e4863a85c4d
|
7
|
+
data.tar.gz: 16f85b720fa3ee9b19372f810223f206cc8ec15abb0b19f6ce18fc2733a72e538386b6758b79c33c3154b5aeab0f19f8abed6926d6a6b2ec53dd36d3bbaac879
|
data/lib/rfc822.rb
CHANGED
@@ -2,29 +2,29 @@ require 'timeout'
|
|
2
2
|
require 'uri'
|
3
3
|
|
4
4
|
module RFC822
|
5
|
-
|
5
|
+
|
6
6
|
module Patterns
|
7
|
-
|
7
|
+
|
8
8
|
ATOM = "[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\u00ff]+"
|
9
|
-
|
10
|
-
QTEXT = "[^\\x0d\\x22\\x5c\\u0080-\\u00ff]"
|
9
|
+
|
10
|
+
QTEXT = "[^\\x0d\\x22\\x5c\\u0080-\\u00ff]"
|
11
11
|
QPAIR = "\\x5c[\\x00-\\x7f]"
|
12
12
|
QSTRING = "\\x22(?:#{QTEXT}|#{QPAIR})*\\x22"
|
13
|
-
|
13
|
+
|
14
14
|
WORD = "(?:#{ATOM}|#{QSTRING})"
|
15
15
|
|
16
16
|
LOCAL_PT = "#{WORD}(?:\\x2e#{WORD})*"
|
17
|
-
ADDRESS = "#{LOCAL_PT}\\x40
|
17
|
+
ADDRESS = "#{LOCAL_PT}\\x40(?:#{URI::REGEXP::PATTERN::HOSTNAME})?#{ATOM}"
|
18
18
|
|
19
19
|
end
|
20
|
-
|
21
|
-
MXRecord = Struct.new(:priority, :host)
|
20
|
+
|
21
|
+
MXRecord = Struct.new(:priority, :host)
|
22
22
|
EMAIL = /\A#{Patterns::ADDRESS}\z/
|
23
|
-
|
23
|
+
|
24
24
|
@@host_command = '/usr/bin/env host'
|
25
|
-
|
25
|
+
|
26
26
|
class << self
|
27
|
-
|
27
|
+
|
28
28
|
def host_command
|
29
29
|
@@host_command
|
30
30
|
end
|
@@ -36,8 +36,8 @@ module RFC822
|
|
36
36
|
def mx_records(address)
|
37
37
|
address = address.to_s
|
38
38
|
return [] unless address =~ EMAIL
|
39
|
-
|
40
|
-
Timeout::timeout(2) do
|
39
|
+
|
40
|
+
Timeout::timeout(2) do
|
41
41
|
raw_mx_records(address.split('@').last).map do |priority, host|
|
42
42
|
MXRecord.new(priority.to_i, host)
|
43
43
|
end
|
@@ -46,12 +46,12 @@ module RFC822
|
|
46
46
|
[]
|
47
47
|
end
|
48
48
|
|
49
|
-
def raw_mx_records(domain)
|
50
|
-
host_mx(domain).scan(/#{Regexp.escape(domain)}[\w ]+?(\d+) (#{URI::REGEXP::PATTERN::HOSTNAME})\./)
|
49
|
+
def raw_mx_records(domain)
|
50
|
+
host_mx(domain).scan(/#{Regexp.escape(domain)}[\w ]+?(\d+) (#{URI::REGEXP::PATTERN::HOSTNAME})\./)
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
def host_mx(domain)
|
54
|
-
`#{host_command} -t MX #{domain}`
|
54
|
+
`#{host_command} -t MX #{domain}`
|
55
55
|
end
|
56
56
|
|
57
57
|
end
|
data/spec/rfc822_spec.rb
CHANGED
@@ -3,52 +3,54 @@ require File.dirname(__FILE__) + '/helper'
|
|
3
3
|
describe RFC822 do
|
4
4
|
|
5
5
|
after do
|
6
|
-
RFC822.host_command = '/usr/bin/env host'
|
6
|
+
RFC822.host_command = '/usr/bin/env host'
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
describe 'email pattern' do
|
10
|
-
|
10
|
+
|
11
11
|
it 'should match RFC822 compliant addresses' do
|
12
|
-
"user@
|
13
|
-
"user@home
|
14
|
-
"user@
|
15
|
-
"user@
|
16
|
-
"
|
17
|
-
"
|
18
|
-
"
|
19
|
-
"
|
20
|
-
"
|
21
|
-
"
|
22
|
-
"
|
12
|
+
expect("user@x").to match(RFC822::EMAIL)
|
13
|
+
expect("user@home").to match(RFC822::EMAIL)
|
14
|
+
expect("user@home.com").to match(RFC822::EMAIL)
|
15
|
+
expect("user@dashed-home.info").to match(RFC822::EMAIL)
|
16
|
+
expect("user@separated.home.info").to match(RFC822::EMAIL)
|
17
|
+
expect("dashed-user@home.com").to match(RFC822::EMAIL)
|
18
|
+
expect("underscored_user@home.com").to match(RFC822::EMAIL)
|
19
|
+
expect("separated.user@home.com").to match(RFC822::EMAIL)
|
20
|
+
expect("slashed/user@home.com").to match(RFC822::EMAIL)
|
21
|
+
expect("plussed+user@home.com").to match(RFC822::EMAIL)
|
22
|
+
expect("{wrapped}user@home.com").to match(RFC822::EMAIL)
|
23
|
+
expect("end-dashed-@home.com").to match(RFC822::EMAIL)
|
23
24
|
end
|
24
25
|
|
25
26
|
it 'should not match non-RFC822 compliant addresses' do
|
26
|
-
"user-home".
|
27
|
-
"@home.com".
|
28
|
-
"user@".
|
29
|
-
"user@
|
30
|
-
"user@
|
31
|
-
"user@just
|
32
|
-
"user@just
|
33
|
-
"
|
34
|
-
"wrong
|
35
|
-
"wrong
|
36
|
-
"wrong
|
37
|
-
"wrong
|
38
|
-
|
39
|
-
|
27
|
+
expect("user-home").not_to match(RFC822::EMAIL)
|
28
|
+
expect("@home.com").not_to match(RFC822::EMAIL)
|
29
|
+
expect("user@").not_to match(RFC822::EMAIL)
|
30
|
+
expect("user@trailing.period.").not_to match(RFC822::EMAIL)
|
31
|
+
expect("user@underscored_home.org").not_to match(RFC822::EMAIL)
|
32
|
+
expect("user@just,wrong.org").not_to match(RFC822::EMAIL)
|
33
|
+
expect("user@just/wrong.org").not_to match(RFC822::EMAIL)
|
34
|
+
expect("user@just wrong.org").not_to match(RFC822::EMAIL)
|
35
|
+
expect("wrong,user@home.com").not_to match(RFC822::EMAIL)
|
36
|
+
expect("wrong-user.@home.com").not_to match(RFC822::EMAIL)
|
37
|
+
expect("wrong@user@home.com").not_to match(RFC822::EMAIL)
|
38
|
+
expect("wrong user@home.com").not_to match(RFC822::EMAIL)
|
39
|
+
expect("wrong(user)@home.com").not_to match(RFC822::EMAIL)
|
40
|
+
end
|
41
|
+
|
40
42
|
end
|
41
|
-
|
43
|
+
|
42
44
|
it 'should allow to change the host command' do
|
43
|
-
RFC822.host_command.
|
45
|
+
expect(RFC822.host_command).to eq('/usr/bin/env host')
|
44
46
|
RFC822.host_command = '/opt/bin host'
|
45
|
-
RFC822.host_command.
|
47
|
+
expect(RFC822.host_command).to eq('/opt/bin host')
|
46
48
|
end
|
47
|
-
|
49
|
+
|
48
50
|
describe 'MX record check' do
|
49
51
|
|
50
52
|
before do
|
51
|
-
RFC822.
|
53
|
+
allow(RFC822).to receive(:host_mx).and_return(%Q(
|
52
54
|
hotmail.com mail is handled by 5 mx3.hotmail.com.
|
53
55
|
hotmail.com mail is handled by 5 mx4.hotmail.com.
|
54
56
|
hotmail.com mail is handled by 5 mx1.hotmail.com.
|
@@ -57,24 +59,24 @@ hotmail.com mail is handled by 5 mx2.hotmail.com.
|
|
57
59
|
end
|
58
60
|
|
59
61
|
it 'should return raw MX records fo a domain' do
|
60
|
-
RFC822.raw_mx_records('hotmail.com').
|
61
|
-
["5", "mx3.hotmail.com"],
|
62
|
-
["5", "mx4.hotmail.com"],
|
63
|
-
["5", "mx1.hotmail.com"],
|
64
|
-
["5", "mx2.hotmail.com"]
|
65
|
-
]
|
62
|
+
expect(RFC822.raw_mx_records('hotmail.com')).to eq([
|
63
|
+
["5", "mx3.hotmail.com"],
|
64
|
+
["5", "mx4.hotmail.com"],
|
65
|
+
["5", "mx1.hotmail.com"],
|
66
|
+
["5", "mx2.hotmail.com"],
|
67
|
+
])
|
66
68
|
end
|
67
69
|
|
68
70
|
it 'should return prioritised MX records of an address' do
|
69
|
-
RFC822.mx_records('user@hotmail.com').
|
71
|
+
expect(RFC822.mx_records('user@hotmail.com').size).to eq(4)
|
70
72
|
record = RFC822.mx_records('user@hotmail.com').first
|
71
|
-
record.priority.
|
72
|
-
record.host.
|
73
|
+
expect(record.priority).to eq(5)
|
74
|
+
expect(record.host).to eq("mx3.hotmail.com")
|
73
75
|
end
|
74
76
|
|
75
77
|
it 'should return an empty result if address is invalid' do
|
76
|
-
RFC822.mx_records('user@hotmail@com').
|
78
|
+
expect(RFC822.mx_records('user@hotmail@com')).to eq([])
|
77
79
|
end
|
78
|
-
|
80
|
+
|
79
81
|
end
|
80
82
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rfc-822
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dimitrij Denissenko
|
@@ -9,34 +9,34 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-12-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '0'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rspec
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
description: RFC822 compatible email validation and MX record check
|
@@ -50,8 +50,8 @@ files:
|
|
50
50
|
- init.rb
|
51
51
|
- lib/rfc-822.rb
|
52
52
|
- lib/rfc822.rb
|
53
|
-
- spec/rfc822_spec.rb
|
54
53
|
- spec/helper.rb
|
54
|
+
- spec/rfc822_spec.rb
|
55
55
|
homepage: http://github.com/dim/rfc-822
|
56
56
|
licenses: []
|
57
57
|
metadata: {}
|
@@ -61,20 +61,20 @@ require_paths:
|
|
61
61
|
- lib
|
62
62
|
required_ruby_version: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
|
-
- -
|
64
|
+
- - ">="
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: 1.9.1
|
67
67
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
|
-
- -
|
69
|
+
- - ">="
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: 1.3.6
|
72
72
|
requirements: []
|
73
73
|
rubyforge_project:
|
74
|
-
rubygems_version: 2.
|
74
|
+
rubygems_version: 2.4.8
|
75
75
|
signing_key:
|
76
76
|
specification_version: 4
|
77
77
|
summary: RFC822 compatible email validation and MX record check
|
78
78
|
test_files:
|
79
|
-
- spec/rfc822_spec.rb
|
80
79
|
- spec/helper.rb
|
80
|
+
- spec/rfc822_spec.rb
|