mx_record 0.1.0 → 0.1.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/Gemfile +2 -7
- data/Gemfile.lock +21 -5
- data/README.md +13 -1
- data/VERSION +1 -1
- data/lib/mx_record.rb +28 -10
- data/mx_record.gemspec +6 -7
- data/test/test_mx_record.rb +16 -2
- metadata +67 -54
- data/.rbenv-version +0 -1
data/Gemfile
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
|
-
# Add dependencies required to use your gem here.
|
3
|
-
# Example:
|
4
|
-
# gem "activesupport", ">= 2.3.5"
|
5
2
|
|
6
|
-
# Add dependencies to develop your gem here.
|
7
|
-
# Include everything needed to run rake, tests, features, etc.
|
8
3
|
group :development, :test do
|
9
4
|
gem "shoulda", ">= 0"
|
10
5
|
gem "rdoc", "~> 3.12"
|
11
|
-
gem "bundler", "~> 1.
|
6
|
+
gem "bundler", "~> 1.2.3"
|
12
7
|
gem "jeweler", "~> 1.8.3"
|
13
|
-
end
|
8
|
+
end
|
data/Gemfile.lock
CHANGED
@@ -1,23 +1,39 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
activesupport (3.2.11)
|
5
|
+
i18n (~> 0.6)
|
6
|
+
multi_json (~> 1.0)
|
7
|
+
bourne (1.1.2)
|
8
|
+
mocha (= 0.10.5)
|
4
9
|
git (1.2.5)
|
5
|
-
|
10
|
+
i18n (0.6.1)
|
11
|
+
jeweler (1.8.4)
|
6
12
|
bundler (~> 1.0)
|
7
13
|
git (>= 1.2.5)
|
8
14
|
rake
|
9
15
|
rdoc
|
10
|
-
json (1.6
|
11
|
-
|
16
|
+
json (1.7.6)
|
17
|
+
metaclass (0.0.1)
|
18
|
+
mocha (0.10.5)
|
19
|
+
metaclass (~> 0.0.1)
|
20
|
+
multi_json (1.5.0)
|
21
|
+
rake (10.0.3)
|
12
22
|
rdoc (3.12)
|
13
23
|
json (~> 1.4)
|
14
|
-
shoulda (
|
24
|
+
shoulda (3.3.2)
|
25
|
+
shoulda-context (~> 1.0.1)
|
26
|
+
shoulda-matchers (~> 1.4.1)
|
27
|
+
shoulda-context (1.0.2)
|
28
|
+
shoulda-matchers (1.4.2)
|
29
|
+
activesupport (>= 3.0.0)
|
30
|
+
bourne (~> 1.1.2)
|
15
31
|
|
16
32
|
PLATFORMS
|
17
33
|
ruby
|
18
34
|
|
19
35
|
DEPENDENCIES
|
20
|
-
bundler (~> 1.
|
36
|
+
bundler (~> 1.2.3)
|
21
37
|
jeweler (~> 1.8.3)
|
22
38
|
rdoc (~> 3.12)
|
23
39
|
shoulda
|
data/README.md
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
# mx_record
|
2
2
|
|
3
|
-
|
3
|
+
A mail exchanger record (MX record) is a type of resource record in the Domain Name System that specifies a mail server responsible for accepting email messages on behalf of a recipient's domain, and a preference value used to prioritize mail delivery if multiple mail servers are available. The set of MX records of a domain name specifies how email should be routed with the Simple Mail Transfer Protocol [[more](http://en.wikipedia.org/wiki/MX_record)].
|
4
|
+
|
5
|
+
# Usage
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
MXRecord::get_server('google.com')
|
9
|
+
#=> aspmx.l.google.com
|
10
|
+
```
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
MXRecord::get_server('rangers.co.uk')
|
14
|
+
#=> mail.rangers.co.uk
|
15
|
+
```
|
4
16
|
|
5
17
|
# Contributing to mx_record
|
6
18
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/lib/mx_record.rb
CHANGED
@@ -1,17 +1,35 @@
|
|
1
1
|
require 'resolv'
|
2
2
|
|
3
3
|
module MXRecord
|
4
|
-
|
5
|
-
|
4
|
+
|
5
|
+
# Obtain the mail exchange record for a particular domain.
|
6
|
+
#
|
7
|
+
# Returns an array of Resolv::DNS::Resource::IN::MX records e.g. for Google:
|
8
|
+
#
|
9
|
+
# [ #<Resolv::DNS::Resource::IN::MX:0x007faaac870da8 @preference=50, @exchange=#<Resolv::DNS::Name: alt4.aspmx.l.google.com.>, @ttl=347>,
|
10
|
+
# #<Resolv::DNS::Resource::IN::MX:0x007faaac8769b0 @preference=20, @exchange=#<Resolv::DNS::Name: alt1.aspmx.l.google.com.>, @ttl=347>,
|
11
|
+
# #<Resolv::DNS::Resource::IN::MX:0x007faaac874db8 @preference=40, @exchange=#<Resolv::DNS::Name: alt3.aspmx.l.google.com.>, @ttl=347>,
|
12
|
+
# #<Resolv::DNS::Resource::IN::MX:0x007faaac87abf0 @preference=30, @exchange=#<Resolv::DNS::Name: alt2.aspmx.l.google.com.>, @ttl=347>,
|
13
|
+
# #<Resolv::DNS::Resource::IN::MX:0x007faaac87f830 @preference=10, @exchange=#<Resolv::DNS::Name: aspmx.l.google.com.>, @ttl=347> ]
|
14
|
+
def self.mail_servers(domain)
|
6
15
|
Resolv::DNS.open do |dns|
|
7
|
-
|
8
|
-
return nil unless mail_servers and not mail_servers.empty?
|
9
|
-
highest_priority = mail_servers.first
|
10
|
-
mail_servers.each do |server|
|
11
|
-
highest_priority = server if server.preference < highest_priority.preference
|
12
|
-
end
|
13
|
-
mx = highest_priority.exchange.to_s
|
16
|
+
dns.getresources(domain, Resolv::DNS::Resource::IN::MX)
|
14
17
|
end
|
15
|
-
|
18
|
+
end
|
19
|
+
|
20
|
+
# Obtain the preferred mail server based on the MX record's preference.
|
21
|
+
#
|
22
|
+
# Returns a String containing the mail server name e.g. aspmx.l.google.com;
|
23
|
+
# returns nil if no servers are found.
|
24
|
+
def self.primary_server(domain)
|
25
|
+
servers = mail_servers(domain)
|
26
|
+
|
27
|
+
primary_server = servers.first
|
28
|
+
|
29
|
+
servers.each do |server|
|
30
|
+
primary_server = server if server.preference < primary_server.preference
|
31
|
+
end
|
32
|
+
|
33
|
+
primary_server.exchange.to_s
|
16
34
|
end
|
17
35
|
end
|
data/mx_record.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "mx_record"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Lee Reilly"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2013-01-22"
|
13
13
|
s.description = "Find MX records for a given domain name"
|
14
14
|
s.email = "lee@leereilly.net"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -17,7 +17,6 @@ Gem::Specification.new do |s|
|
|
17
17
|
"README.md"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
|
-
".rbenv-version",
|
21
20
|
"Gemfile",
|
22
21
|
"Gemfile.lock",
|
23
22
|
"LICENSE.txt",
|
@@ -32,7 +31,7 @@ Gem::Specification.new do |s|
|
|
32
31
|
s.homepage = "http://github.com/leereilly/mx_record"
|
33
32
|
s.licenses = ["MIT"]
|
34
33
|
s.require_paths = ["lib"]
|
35
|
-
s.rubygems_version = "1.8.
|
34
|
+
s.rubygems_version = "1.8.23"
|
36
35
|
s.summary = "Find MX records for a given domain name"
|
37
36
|
|
38
37
|
if s.respond_to? :specification_version then
|
@@ -41,18 +40,18 @@ Gem::Specification.new do |s|
|
|
41
40
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
42
41
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
43
42
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
44
|
-
s.add_development_dependency(%q<bundler>, ["~> 1.
|
43
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.2.3"])
|
45
44
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
|
46
45
|
else
|
47
46
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
48
47
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
49
|
-
s.add_dependency(%q<bundler>, ["~> 1.
|
48
|
+
s.add_dependency(%q<bundler>, ["~> 1.2.3"])
|
50
49
|
s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
|
51
50
|
end
|
52
51
|
else
|
53
52
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
54
53
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
55
|
-
s.add_dependency(%q<bundler>, ["~> 1.
|
54
|
+
s.add_dependency(%q<bundler>, ["~> 1.2.3"])
|
56
55
|
s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
|
57
56
|
end
|
58
57
|
end
|
data/test/test_mx_record.rb
CHANGED
@@ -1,8 +1,22 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class TestMxRecord < Test::Unit::TestCase
|
4
|
-
should "
|
5
|
-
mx_server = MXRecord::
|
4
|
+
should "obtain the highest priority mail server" do
|
5
|
+
mx_server = MXRecord::primary_server('google.com')
|
6
6
|
assert_equal 'aspmx.l.google.com', mx_server
|
7
7
|
end
|
8
|
+
|
9
|
+
should "obtain all of the mail servers" do
|
10
|
+
mx_servers = MXRecord::mail_servers('google.com')
|
11
|
+
assert_equal 5, mx_servers.size
|
12
|
+
end
|
13
|
+
|
14
|
+
should "return nothing when valid domains have no mail servers" do
|
15
|
+
assert_equal [], MXRecord::mail_servers('example.com')
|
16
|
+
end
|
17
|
+
|
18
|
+
should "return nothing when invalid domains are supplied" do
|
19
|
+
assert_equal [], MXRecord::mail_servers('git.hub')
|
20
|
+
end
|
21
|
+
|
8
22
|
end
|
metadata
CHANGED
@@ -1,72 +1,88 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: mx_record
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.3
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Lee Reilly
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-01-22 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: shoulda
|
17
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
|
-
requirements:
|
20
|
-
- -
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
23
22
|
type: :development
|
24
23
|
prerelease: false
|
25
|
-
version_requirements:
|
26
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
27
31
|
name: rdoc
|
28
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
29
33
|
none: false
|
30
|
-
requirements:
|
34
|
+
requirements:
|
31
35
|
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version:
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '3.12'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
|
-
version_requirements:
|
37
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.12'
|
46
|
+
- !ruby/object:Gem::Dependency
|
38
47
|
name: bundler
|
39
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
40
49
|
none: false
|
41
|
-
requirements:
|
50
|
+
requirements:
|
42
51
|
- - ~>
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: 1.
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.2.3
|
45
54
|
type: :development
|
46
55
|
prerelease: false
|
47
|
-
version_requirements:
|
48
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.2.3
|
62
|
+
- !ruby/object:Gem::Dependency
|
49
63
|
name: jeweler
|
50
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
51
65
|
none: false
|
52
|
-
requirements:
|
66
|
+
requirements:
|
53
67
|
- - ~>
|
54
|
-
- !ruby/object:Gem::Version
|
68
|
+
- !ruby/object:Gem::Version
|
55
69
|
version: 1.8.3
|
56
70
|
type: :development
|
57
71
|
prerelease: false
|
58
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.8.3
|
59
78
|
description: Find MX records for a given domain name
|
60
79
|
email: lee@leereilly.net
|
61
80
|
executables: []
|
62
|
-
|
63
81
|
extensions: []
|
64
|
-
|
65
|
-
extra_rdoc_files:
|
82
|
+
extra_rdoc_files:
|
66
83
|
- LICENSE.txt
|
67
84
|
- README.md
|
68
|
-
files:
|
69
|
-
- .rbenv-version
|
85
|
+
files:
|
70
86
|
- Gemfile
|
71
87
|
- Gemfile.lock
|
72
88
|
- LICENSE.txt
|
@@ -78,34 +94,31 @@ files:
|
|
78
94
|
- test/helper.rb
|
79
95
|
- test/test_mx_record.rb
|
80
96
|
homepage: http://github.com/leereilly/mx_record
|
81
|
-
licenses:
|
97
|
+
licenses:
|
82
98
|
- MIT
|
83
99
|
post_install_message:
|
84
100
|
rdoc_options: []
|
85
|
-
|
86
|
-
require_paths:
|
101
|
+
require_paths:
|
87
102
|
- lib
|
88
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
89
104
|
none: false
|
90
|
-
requirements:
|
91
|
-
- -
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
|
94
|
-
segments:
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
segments:
|
95
110
|
- 0
|
96
|
-
|
97
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
hash: 2296114277497960799
|
112
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
113
|
none: false
|
99
|
-
requirements:
|
100
|
-
- -
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version:
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
103
118
|
requirements: []
|
104
|
-
|
105
119
|
rubyforge_project:
|
106
|
-
rubygems_version: 1.8.
|
120
|
+
rubygems_version: 1.8.23
|
107
121
|
signing_key:
|
108
122
|
specification_version: 3
|
109
123
|
summary: Find MX records for a given domain name
|
110
124
|
test_files: []
|
111
|
-
|
data/.rbenv-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.9.2-p290
|