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 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.0.0"
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
- jeweler (1.8.3)
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.5)
11
- rake (0.9.2.2)
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 (2.11.3)
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.0.0)
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
- > 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)].
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.0
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
- def self.get_server(domain)
5
- mx = nil
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
- mail_servers = dns.getresources(domain, Resolv::DNS::Resource::IN::MX)
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
- return mx
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.0"
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 = "2012-04-23"
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.21"
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.0.0"])
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.0.0"])
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.0.0"])
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
@@ -1,8 +1,22 @@
1
1
  require 'helper'
2
2
 
3
3
  class TestMxRecord < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- mx_server = MXRecord::get_server('google.com')
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
- date: 2012-04-23 00:00:00 Z
14
- dependencies:
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: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
18
17
  none: false
19
- requirements:
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
23
22
  type: :development
24
23
  prerelease: false
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
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: &id002 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
29
33
  none: false
30
- requirements:
34
+ requirements:
31
35
  - - ~>
32
- - !ruby/object:Gem::Version
33
- version: "3.12"
36
+ - !ruby/object:Gem::Version
37
+ version: '3.12'
34
38
  type: :development
35
39
  prerelease: false
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
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: &id003 !ruby/object:Gem::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.0.0
52
+ - !ruby/object:Gem::Version
53
+ version: 1.2.3
45
54
  type: :development
46
55
  prerelease: false
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
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: &id004 !ruby/object:Gem::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: *id004
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
- hash: -1185378686703042268
94
- segments:
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ segments:
95
110
  - 0
96
- version: "0"
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: "0"
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
103
118
  requirements: []
104
-
105
119
  rubyforge_project:
106
- rubygems_version: 1.8.21
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