jm81-ruby-whois 0.5.0

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.
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