jm81-ruby-whois 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/LICENSE +1020 -0
  2. data/README +4 -0
  3. data/Rakefile +43 -0
  4. data/VERSION +1 -0
  5. data/lib/whois.rb +9 -0
  6. data/lib/whois/domain.rb +18 -0
  7. data/lib/whois/domain/aero.rb +27 -0
  8. data/lib/whois/domain/afilias.rb +26 -0
  9. data/lib/whois/domain/base.rb +114 -0
  10. data/lib/whois/domain/cat.rb +30 -0
  11. data/lib/whois/domain/coop.rb +31 -0
  12. data/lib/whois/domain/educause.rb +51 -0
  13. data/lib/whois/domain/gov.rb +35 -0
  14. data/lib/whois/domain/int.rb +41 -0
  15. data/lib/whois/domain/mobi.rb +26 -0
  16. data/lib/whois/domain/museum.rb +28 -0
  17. data/lib/whois/domain/name.rb +36 -0
  18. data/lib/whois/domain/neustar.rb +42 -0
  19. data/lib/whois/domain/pro.rb +32 -0
  20. data/lib/whois/domain/public_interest.rb +25 -0
  21. data/lib/whois/domain/verisign_grs.rb +36 -0
  22. data/lib/whois/domain/ws.rb +58 -0
  23. data/ruby-whois.gemspec +95 -0
  24. data/test/test_helper.rb +59 -0
  25. data/test/whois/domain/aero_test.rb +24 -0
  26. data/test/whois/domain/afilias_test.rb +24 -0
  27. data/test/whois/domain/cat_test.rb +28 -0
  28. data/test/whois/domain/coop_test.rb +28 -0
  29. data/test/whois/domain/educause_test.rb +24 -0
  30. data/test/whois/domain/gov_test.rb +28 -0
  31. data/test/whois/domain/int_test.rb +24 -0
  32. data/test/whois/domain/mobi_test.rb +24 -0
  33. data/test/whois/domain/museum_test.rb +28 -0
  34. data/test/whois/domain/name_test.rb +24 -0
  35. data/test/whois/domain/neustar_test.rb +134 -0
  36. data/test/whois/domain/pro_test.rb +27 -0
  37. data/test/whois/domain/public_interest_test.rb +75 -0
  38. data/test/whois/domain/verisign_grs_test.rb +90 -0
  39. data/test/whois/domain/ws_test.rb +24 -0
  40. data/test/whois/domain_test.rb +15 -0
  41. metadata +110 -0
@@ -0,0 +1,26 @@
1
+ class Whois::Domain::Mobi < Whois::Domain::Base
2
+ HOST = "whois.dotmobiregistry.net"
3
+ ATTR_MATCH = /^([^:]+):(\S.*)\r$/
4
+ responds_to :mobi
5
+
6
+ ATTR_NAMES = {
7
+ :registrar_name => "Sponsoring Registrar",
8
+ :created_on => "Created On",
9
+ :updated_on => "Last Updated On",
10
+ :expires_on => "Expiration Date"
11
+ }
12
+
13
+ # I couldn't find any database updated information for .org
14
+ def database_updated_at
15
+ nil
16
+ end
17
+
18
+ # No whois server listed for .org domains, so always return the whois server used here.
19
+ def whois_server
20
+ HOST
21
+ end
22
+
23
+ def available?
24
+ @raw =~ /NOT FOUND/
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ class Whois::Domain::Museum < Whois::Domain::Base
2
+ HOST = "whois.museum"
3
+ ATTR_MATCH = /^([^:]+):\s(.*)\r$/
4
+ responds_to :museum
5
+
6
+ ATTR_NAMES = {
7
+ :registrar_name => "Registrar ID",
8
+ :created_on => "Created On",
9
+ :updated_on => "Last Updated On",
10
+ :expires_on => "Expiration Date"
11
+ }
12
+
13
+ def database_updated_at
14
+ nil
15
+ end
16
+
17
+ def whois_server
18
+ HOST
19
+ end
20
+
21
+ def available?
22
+ @raw =~ /NOT FOUND/
23
+ end
24
+
25
+ def register_url
26
+ "http://about.museum/register/"
27
+ end
28
+ end
@@ -0,0 +1,36 @@
1
+ class Whois::Domain::Name < Whois::Domain::Base
2
+ HOST = "whois.nic.name"
3
+ ATTR_MATCH = /^([^:]+):\s(.*)\r$/
4
+ responds_to :name
5
+
6
+ ATTR_NAMES = {
7
+ :registrar_name => "Sponsoring Registrar",
8
+ :created_on => "Created On",
9
+ :updated_on => "Updated On",
10
+ :expires_on => "Expires On",
11
+ :status => "Domain Status"
12
+ }
13
+
14
+ def database_updated_at
15
+ nil
16
+ end
17
+
18
+ def whois_server
19
+ HOST
20
+ end
21
+
22
+ def available?
23
+ @raw =~ /No match/
24
+ end
25
+
26
+ # whois.nic.name uses a query in the format
27
+ # object = name. e.g. domain = john.smith.name
28
+ def query
29
+ s = TCPsocket.open(host, 43)
30
+ s.write("domain = #{@name}\n")
31
+ ret = ""
32
+ while s.gets do ret += $_ end
33
+ s.close
34
+ @raw = ret
35
+ end
36
+ end
@@ -0,0 +1,42 @@
1
+ class Whois::Domain::Neustar < Whois::Domain::Base
2
+ ATTR_MATCH = /^([^:]+):\s{2,}(.*)$/
3
+ responds_to :biz, :us, :travel
4
+
5
+ ATTR_NAMES = {
6
+ :registrar_name => "Sponsoring Registrar",
7
+ :created_on => "Domain Registration Date",
8
+ :updated_on => "Domain Last Updated Date",
9
+ :expires_on => "Domain Expiration Date",
10
+ :status => "Domain Status"
11
+ }
12
+
13
+ def host
14
+ case @name.match(/.*\.([^\.]+)$/)[1]
15
+ when 'biz' then 'whois.biz'
16
+ when 'us' then 'whois.nic.us'
17
+ when 'travel' then 'whois.nic.travel'
18
+ end
19
+ end
20
+
21
+ def database_updated_at
22
+ if(@raw =~ /Whois database was last updated on: ([^<]*)/)
23
+ Time.parse($1)
24
+ end
25
+ end
26
+
27
+ def whois_server
28
+ host
29
+ end
30
+
31
+ def available?
32
+ @raw =~ /Not found:/
33
+ end
34
+
35
+ def register_url
36
+ if @name.match(/.*\.([^\.]+)$/)[1] == "travel"
37
+ "http://www.travel.travel/authenticationframe.htm"
38
+ else
39
+ super
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,32 @@
1
+ class Whois::Domain::Pro < Whois::Domain::Base
2
+ HOST = "whois.registrypro.pro"
3
+ ATTR_MATCH = /^([^:]+):\W*(.*)\r$/
4
+ responds_to :pro
5
+
6
+ ATTR_NAMES = {
7
+ :registrar_name => "Sponsoring Registrar",
8
+ :created_on => "Created On",
9
+ :updated_on => "Last Updated On",
10
+ :expires_on => "Expiration Date"
11
+ }
12
+
13
+ def database_updated_at
14
+ nil
15
+ end
16
+
17
+ def status
18
+ attrs["Status"] ? attrs["Status"][0].split(",").collect{|d| d.strip} : nil
19
+ end
20
+
21
+ def whois_server
22
+ HOST
23
+ end
24
+
25
+ def register_url
26
+ "http://www.registrypro.pro/partners_findaregistrar.htm"
27
+ end
28
+
29
+ def available?
30
+ @raw =~ /^No match/
31
+ end
32
+ end
@@ -0,0 +1,25 @@
1
+ class Whois::Domain::PublicInterest < Whois::Domain::Base
2
+ HOST = "whois.pir.org"
3
+ ATTR_MATCH = /^([^:]+):(\S.*)\r$/
4
+ responds_to :org
5
+
6
+ ATTR_NAMES = {
7
+ :registrar_name => "Sponsoring Registrar",
8
+ :created_on => "Created On",
9
+ :updated_on => "Last Updated On"
10
+ }
11
+
12
+ # I couldn't find any database updated information for .org
13
+ def database_updated_at
14
+ nil
15
+ end
16
+
17
+ # No whois server listed for .org domains, so always return the whois server used here.
18
+ def whois_server
19
+ HOST
20
+ end
21
+
22
+ def available?
23
+ @raw =~ /NOT FOUND/
24
+ end
25
+ end
@@ -0,0 +1,36 @@
1
+ class Whois::Domain::VerisignGrs < Whois::Domain::Base
2
+ HOST = "whois.verisign-grs.com"
3
+ ATTR_MATCH = /^ ([^:]+):\W*(.*)$/
4
+ responds_to :com, :net, :jobs, :tv
5
+
6
+ def host
7
+ case @name.match(/.*\.([^\.]+)$/)[1]
8
+ when 'jobs' then "jobswhois.verisign-grs.com"
9
+ when 'tv' then "tvwhois.verisign-grs.com"
10
+ else "whois.verisign-grs.com"
11
+ end
12
+ end
13
+
14
+ # For best results, this use object = name format.
15
+ # e.g. domain = john.smith.name
16
+ def query
17
+ s = TCPsocket.open(host, 43)
18
+ s.write("domain = #{@name}\n")
19
+ ret = ""
20
+ while s.gets do
21
+ ret += $_
22
+ end
23
+ s.close
24
+ @raw = ret
25
+ end
26
+
27
+ def database_updated_at
28
+ if(@raw =~ /Last update of whois database: ([^<]*)/)
29
+ Time.parse($1)
30
+ end
31
+ end
32
+
33
+ def available?
34
+ @raw =~ /^No match for/
35
+ end
36
+ end
@@ -0,0 +1,58 @@
1
+ class Whois::Domain::Ws < Whois::Domain::Base
2
+ HOST = "whois.website.ws"
3
+ ATTR_MATCH = /\s*([^:]+):\s+(.*)$/
4
+ responds_to :ws
5
+
6
+ ATTR_NAMES = {
7
+ :registrar_name => "Registrar Name",
8
+ :whois_server => "Registrar Whois",
9
+ :created_on => "Domain created on",
10
+ :updated_on => "Domain last updated on"
11
+ }
12
+
13
+ def database_updated_at
14
+ nil
15
+ end
16
+
17
+ def available?
18
+ @raw =~ /^No match/
19
+ end
20
+
21
+ def name_servers
22
+ found = false
23
+ ns_ary = []
24
+ @raw.each_line do |l|
25
+ if l =~ /Current Nameservers:/
26
+ found = true
27
+ elsif found && l =~ /^\s*(\S+)/
28
+ ns_ary << $1
29
+ end
30
+ end
31
+ ns_ary
32
+ end
33
+
34
+ def created_on
35
+ if @raw =~ /Domain Created: (.*)$/
36
+ Date.parse($1)
37
+ else
38
+ nil
39
+ end
40
+ end
41
+
42
+ def updated_on
43
+ if @raw =~ /Domain Last Updated: (.*)$/
44
+ Date.parse($1)
45
+ else
46
+ nil
47
+ end
48
+ end
49
+
50
+ def expires_on
51
+ if @raw =~ /Domain Currently Expires: (.*)$/
52
+ Date.parse($1)
53
+ else
54
+ nil
55
+ end
56
+ end
57
+
58
+ end
@@ -0,0 +1,95 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{ruby-whois}
8
+ s.version = "0.5.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Jared Morgan"]
12
+ s.date = %q{2009-09-22}
13
+ s.email = %q{jmorgan@morgancreative.net}
14
+ s.extra_rdoc_files = [
15
+ "LICENSE",
16
+ "README"
17
+ ]
18
+ s.files = [
19
+ "LICENSE",
20
+ "README",
21
+ "Rakefile",
22
+ "VERSION",
23
+ "lib/whois.rb",
24
+ "lib/whois/domain.rb",
25
+ "lib/whois/domain/aero.rb",
26
+ "lib/whois/domain/afilias.rb",
27
+ "lib/whois/domain/base.rb",
28
+ "lib/whois/domain/cat.rb",
29
+ "lib/whois/domain/coop.rb",
30
+ "lib/whois/domain/educause.rb",
31
+ "lib/whois/domain/gov.rb",
32
+ "lib/whois/domain/int.rb",
33
+ "lib/whois/domain/mobi.rb",
34
+ "lib/whois/domain/museum.rb",
35
+ "lib/whois/domain/name.rb",
36
+ "lib/whois/domain/neustar.rb",
37
+ "lib/whois/domain/pro.rb",
38
+ "lib/whois/domain/public_interest.rb",
39
+ "lib/whois/domain/verisign_grs.rb",
40
+ "lib/whois/domain/ws.rb",
41
+ "ruby-whois.gemspec",
42
+ "test/test_helper.rb",
43
+ "test/whois/domain/aero_test.rb",
44
+ "test/whois/domain/afilias_test.rb",
45
+ "test/whois/domain/cat_test.rb",
46
+ "test/whois/domain/coop_test.rb",
47
+ "test/whois/domain/educause_test.rb",
48
+ "test/whois/domain/gov_test.rb",
49
+ "test/whois/domain/int_test.rb",
50
+ "test/whois/domain/mobi_test.rb",
51
+ "test/whois/domain/museum_test.rb",
52
+ "test/whois/domain/name_test.rb",
53
+ "test/whois/domain/neustar_test.rb",
54
+ "test/whois/domain/pro_test.rb",
55
+ "test/whois/domain/public_interest_test.rb",
56
+ "test/whois/domain/verisign_grs_test.rb",
57
+ "test/whois/domain/ws_test.rb",
58
+ "test/whois/domain_test.rb"
59
+ ]
60
+ s.has_rdoc = true
61
+ s.homepage = %q{http://github.com/jm81/ruby-whois}
62
+ s.rdoc_options = ["--charset=UTF-8"]
63
+ s.require_paths = ["lib"]
64
+ s.rubygems_version = %q{1.3.1}
65
+ s.summary = %q{Ruby library for accessing Whois information}
66
+ s.test_files = [
67
+ "test/test_helper.rb",
68
+ "test/whois/domain/aero_test.rb",
69
+ "test/whois/domain/afilias_test.rb",
70
+ "test/whois/domain/cat_test.rb",
71
+ "test/whois/domain/coop_test.rb",
72
+ "test/whois/domain/educause_test.rb",
73
+ "test/whois/domain/gov_test.rb",
74
+ "test/whois/domain/int_test.rb",
75
+ "test/whois/domain/mobi_test.rb",
76
+ "test/whois/domain/museum_test.rb",
77
+ "test/whois/domain/name_test.rb",
78
+ "test/whois/domain/neustar_test.rb",
79
+ "test/whois/domain/pro_test.rb",
80
+ "test/whois/domain/public_interest_test.rb",
81
+ "test/whois/domain/verisign_grs_test.rb",
82
+ "test/whois/domain/ws_test.rb",
83
+ "test/whois/domain_test.rb"
84
+ ]
85
+
86
+ if s.respond_to? :specification_version then
87
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
88
+ s.specification_version = 2
89
+
90
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
91
+ else
92
+ end
93
+ else
94
+ end
95
+ end
@@ -0,0 +1,59 @@
1
+ require 'test/unit'
2
+ require 'whois'
3
+
4
+ class Test::Unit::TestCase
5
+
6
+ # +exp+ expects a hash representing expected results (although +name+ also indicates
7
+ # the domain to be queried if +d+ is not passed.) with the following keys:
8
+ # - name: domain name to be queried
9
+ # - kind: string identifying the name of the expected class
10
+ # (only the class name, namespace is assumed to be Whois::Domain)
11
+ # - created_on: Date created as string (YYYY-MM-DD)
12
+ # - updated_on: Date updated as string (YYYY-MM-DD)
13
+ # - expires_on: Expiration date as string (YYYY-MM-DD)
14
+ # - database_updated_at: false iff this server does not have such a value.
15
+ # - status: Array of statuses.
16
+ # - registrar_name: Name of Registrar
17
+ # - name_servers: Array of name servers
18
+ # - whois_server: Whois server domain
19
+ # - raw_match: A string to match against the raw data.
20
+ # - to_s: Expected to_s
21
+ def assert_whois_data(exp, d = nil)
22
+ d ||= Whois::Domain.new(exp[:name])
23
+
24
+ assert_kind_of Whois::Domain.const_get(exp[:kind]), d, "#{exp[:name]} should be an instance of Whois::Domain::#{exp[:kind]}"
25
+ assert_equal exp[:name], d.name, "Verify that name returns same as name given"
26
+
27
+ assert_equal(Date.parse(exp[:expires_on]).to_s, d.expires_on.to_s, "expiration date") unless exp[:expires_on].nil?
28
+ assert_equal(Date.parse(exp[:created_on]).to_s, d.created_on.to_s, "creation date") unless exp[:created_on].nil?
29
+ assert_equal(Date.parse(exp[:updated_on]).to_s, d.updated_on.to_s, "updated date") unless exp[:updated_on].nil?
30
+
31
+ if exp[:database_updated_at] == false
32
+ assert_nil d.database_updated_at, "no database_updated_at expected on this server"
33
+ else
34
+ assert_kind_of Time, d.database_updated_at, "database_updated_at should return a time object"
35
+ end
36
+
37
+ assert_kind_of Array, d.status, "status should return an Array"
38
+ assert_equal exp[:status], d.status
39
+
40
+ assert_kind_of Array, d.name_servers, "name_server should return an Array"
41
+ unless exp[:name_servers].nil? # see CatTest
42
+ assert_equal exp[:name_servers], d.name_servers
43
+ assert_equal d.name_servers, d.ns, "ns is an alias for name_servers"
44
+ end
45
+
46
+ assert_equal exp[:registrar_name], d.registrar_name
47
+ assert_equal exp[:whois_server], d.whois_server
48
+
49
+ assert_kind_of String, d.raw
50
+ assert_match exp[:raw_match], d.raw
51
+
52
+ if exp[:to_s]
53
+ assert_equal exp[:to_s], d.to_s
54
+ end
55
+
56
+ assert !d.available?
57
+ assert d.registered?
58
+ end
59
+ end