mx_record 0.1.0 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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