whois 0.8.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. data/CHANGELOG.rdoc +61 -0
  2. data/Manifest +87 -4
  3. data/README.rdoc +13 -9
  4. data/Rakefile +4 -1
  5. data/bin/ruby-whois +35 -21
  6. data/lib/whois.rb +6 -0
  7. data/lib/whois/answer.rb +30 -14
  8. data/lib/whois/answer/parser.rb +48 -11
  9. data/lib/whois/answer/parser/ast.rb +72 -0
  10. data/lib/whois/answer/parser/base.rb +14 -9
  11. data/lib/whois/answer/parser/blank.rb +1 -1
  12. data/lib/whois/answer/parser/scanners/verisign.rb +117 -0
  13. data/lib/whois/answer/parser/whois.aero.rb +74 -0
  14. data/lib/whois/answer/parser/whois.afilias-grs.info.rb +72 -0
  15. data/lib/whois/answer/parser/whois.afilias.info.rb +72 -0
  16. data/lib/whois/answer/parser/whois.crsnic.net.rb +5 -115
  17. data/lib/whois/answer/parser/whois.denic.de.rb +28 -25
  18. data/lib/whois/answer/parser/whois.domainregistry.ie.rb +74 -0
  19. data/lib/whois/answer/parser/whois.educause.edu.rb +76 -0
  20. data/lib/whois/answer/parser/whois.eu.org.rb +73 -0
  21. data/lib/whois/answer/parser/whois.iana.org.rb +75 -0
  22. data/lib/whois/answer/parser/whois.nic.asia.rb +74 -0
  23. data/lib/whois/answer/parser/whois.nic.fr.rb +77 -0
  24. data/lib/whois/answer/parser/whois.nic.gov.rb +71 -0
  25. data/lib/whois/answer/parser/whois.nic.hu.rb +332 -0
  26. data/lib/whois/answer/parser/whois.nic.it.rb +5 -23
  27. data/lib/whois/answer/parser/whois.nic.name.rb +73 -0
  28. data/lib/whois/answer/parser/whois.nic.tv.rb +99 -0
  29. data/lib/whois/answer/parser/whois.publicinterestregistry.net.rb +6 -24
  30. data/lib/whois/answer/parser/whois.za.net.rb +75 -0
  31. data/lib/whois/answer/parser/whois.za.org.rb +75 -0
  32. data/lib/whois/client.rb +4 -3
  33. data/lib/whois/definitions/tld.notes.txt +1 -0
  34. data/lib/whois/definitions/tlds.rb +11 -49
  35. data/lib/whois/version.rb +5 -6
  36. data/lib/whois/whois.rb +0 -6
  37. data/test/answer/parser/base_test.rb +21 -0
  38. data/test/answer/parser/blank_test.rb +1 -1
  39. data/test/answer/parser/whois.aero_test.rb +51 -0
  40. data/test/answer/parser/whois.afilias-grs.info_test.rb +51 -0
  41. data/test/answer/parser/whois.afilias.info_test.rb +51 -0
  42. data/test/answer/parser/{whois_crsnic_net_test.rb → whois.crsnic.net_test.rb} +15 -68
  43. data/test/answer/parser/{whois_denic_de_test.rb → whois.denic.de_test.rb} +9 -34
  44. data/test/answer/parser/whois.domainregistry.ie_test.rb +51 -0
  45. data/test/answer/parser/whois.educause.edu_test.rb +51 -0
  46. data/test/answer/parser/whois.eu.org_test.rb +51 -0
  47. data/test/answer/parser/whois.iana.org_test.rb +51 -0
  48. data/test/answer/parser/whois.nic.asia_test.rb +51 -0
  49. data/test/answer/parser/whois.nic.fr_test.rb +51 -0
  50. data/test/answer/parser/whois.nic.gov_test.rb +51 -0
  51. data/test/answer/parser/whois.nic.hu_test.rb +226 -0
  52. data/test/answer/parser/{whois_nic_it_test.rb → whois.nic.it_test.rb} +3 -25
  53. data/test/answer/parser/whois.nic.name_test.rb +51 -0
  54. data/test/answer/parser/whois.nic.tv_test.rb +122 -0
  55. data/test/answer/parser/{whois_publicinterestregistry_net_test.rb → whois.publicinterestregistry.net_test.rb} +4 -26
  56. data/test/answer/parser/whois.za.net_test.rb +51 -0
  57. data/test/answer/parser/whois.za.org_test.rb +51 -0
  58. data/test/answer/parser_test.rb +44 -3
  59. data/test/answer_test.rb +27 -13
  60. data/test/client_test.rb +18 -11
  61. data/test/list_tld +319 -0
  62. data/test/test_helper.rb +24 -0
  63. data/test/testcases/responses/whois.aero/available.txt +1 -0
  64. data/test/testcases/responses/whois.aero/registered.txt +102 -0
  65. data/test/testcases/responses/whois.afilias-grs.info/available.txt +1 -0
  66. data/test/testcases/responses/whois.afilias-grs.info/bz/available.txt +1 -0
  67. data/test/testcases/responses/whois.afilias-grs.info/bz/registered.txt +122 -0
  68. data/test/testcases/responses/whois.afilias-grs.info/gi/available.txt +1 -0
  69. data/test/testcases/responses/whois.afilias-grs.info/gi/registered.txt +98 -0
  70. data/test/testcases/responses/whois.afilias-grs.info/hn/available.txt +1 -0
  71. data/test/testcases/responses/whois.afilias-grs.info/hn/registered.txt +85 -0
  72. data/test/testcases/responses/whois.afilias-grs.info/lc/available.txt +1 -0
  73. data/test/testcases/responses/whois.afilias-grs.info/lc/registered.txt +83 -0
  74. data/test/testcases/responses/whois.afilias-grs.info/mn/available.txt +1 -0
  75. data/test/testcases/responses/whois.afilias-grs.info/mn/registered.txt +100 -0
  76. data/test/testcases/responses/whois.afilias-grs.info/registered.txt +122 -0
  77. data/test/testcases/responses/whois.afilias-grs.info/sc/available.txt +1 -0
  78. data/test/testcases/responses/whois.afilias-grs.info/sc/registered.txt +85 -0
  79. data/test/testcases/responses/whois.afilias-grs.info/vc/available.txt +1 -0
  80. data/test/testcases/responses/whois.afilias-grs.info/vc/registered.txt +100 -0
  81. data/test/testcases/responses/whois.afilias.info/available.txt +1 -0
  82. data/test/testcases/responses/whois.afilias.info/registered.txt +104 -0
  83. data/test/testcases/responses/whois.crsnic.net/MULTIPLE.txt +3 -0
  84. data/test/testcases/responses/whois.domainregistry.ie/available.txt +7 -0
  85. data/test/testcases/responses/whois.domainregistry.ie/registered.txt +26 -0
  86. data/test/testcases/responses/whois.educause.edu/available.txt +28 -0
  87. data/test/testcases/responses/whois.educause.edu/registered.txt +66 -0
  88. data/test/testcases/responses/whois.eu.org/available.txt +1 -0
  89. data/test/testcases/responses/whois.eu.org/registered.txt +19 -0
  90. data/test/testcases/responses/whois.iana.org/MULTIPLE.txt +3 -0
  91. data/test/testcases/responses/whois.iana.org/available.txt +7 -0
  92. data/test/testcases/responses/whois.iana.org/registered.txt +89 -0
  93. data/test/testcases/responses/whois.nic.asia/available.txt +1 -0
  94. data/test/testcases/responses/whois.nic.asia/registered.txt +159 -0
  95. data/test/testcases/responses/whois.nic.fr/MULTIPLE.txt +4 -0
  96. data/test/testcases/responses/whois.nic.fr/available.txt +19 -0
  97. data/test/testcases/responses/whois.nic.fr/registered.txt +98 -0
  98. data/test/testcases/responses/whois.nic.gov/available.txt +1 -0
  99. data/test/testcases/responses/whois.nic.gov/registered.txt +5 -0
  100. data/test/testcases/responses/whois.nic.hu/available.txt +12 -0
  101. data/test/testcases/responses/whois.nic.hu/in_progress.txt +13 -0
  102. data/test/testcases/responses/whois.nic.hu/registered.txt +65 -0
  103. data/test/testcases/responses/whois.nic.name/available.txt +29 -0
  104. data/test/testcases/responses/whois.nic.name/registered.txt +36 -0
  105. data/test/testcases/responses/whois.nic.name/reserved.txt +30 -0
  106. data/test/testcases/responses/whois.nic.tv/available.txt +44 -0
  107. data/test/testcases/responses/whois.nic.tv/registered.txt +54 -0
  108. data/test/testcases/responses/whois.za.net/available.txt +9 -0
  109. data/test/testcases/responses/whois.za.net/registered.txt +42 -0
  110. data/test/testcases/responses/whois.za.org/available.txt +9 -0
  111. data/test/testcases/responses/whois.za.org/registered.txt +44 -0
  112. data/whois.gemspec +9 -6
  113. metadata +138 -15
@@ -0,0 +1,76 @@
1
+ #
2
+ # = Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ #
7
+ # Category:: Net
8
+ # Package:: Whois
9
+ # Author:: Simone Carletti <weppos@weppos.net>
10
+ # License:: MIT License
11
+ #
12
+ #--
13
+ #
14
+ #++
15
+
16
+
17
+ require 'whois/answer/parser/base'
18
+
19
+
20
+ module Whois
21
+ class Answer
22
+ class Parser
23
+
24
+ #
25
+ # = whois.educause.edu parser
26
+ #
27
+ # Parser for the whois.educause.edu server.
28
+ #
29
+ # NOTE: This parser is just a stub and provides only a few basic methods
30
+ # to check for domain availability and get domain status.
31
+ # Please consider to contribute implementing missing methods.
32
+ # See WhoisNicIt parser for an explanation of all available methods
33
+ # and examples.
34
+ #
35
+ class WhoisEducauseEdu < Base
36
+
37
+ register_method :status do
38
+ if available?
39
+ :available
40
+ else
41
+ :registered
42
+ end
43
+ end
44
+
45
+ register_method :available? do
46
+ @available ||= !!(content.to_s =~ /No Match/)
47
+ end
48
+
49
+ register_method :registered? do
50
+ !available?
51
+ end
52
+
53
+
54
+ register_method :created_on do
55
+ @created_on ||= if content.to_s =~ /Domain record activated:\s+(.*)\n/
56
+ Time.parse($1)
57
+ end
58
+ end
59
+
60
+ register_method :updated_on do
61
+ @updated_on ||= if content.to_s =~ /Domain record last updated:\s+(.*)\n/
62
+ Time.parse($1)
63
+ end
64
+ end
65
+
66
+ register_method :expires_on do
67
+ @expires_on ||= if content.to_s =~ /Domain expires:\s+(.*)\n/
68
+ Time.parse($1)
69
+ end
70
+ end
71
+
72
+ end
73
+
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,73 @@
1
+ #
2
+ # = Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ #
7
+ # Category:: Net
8
+ # Package:: Whois
9
+ # Author:: Simone Carletti <weppos@weppos.net>
10
+ # License:: MIT License
11
+ #
12
+ #--
13
+ #
14
+ #++
15
+
16
+
17
+ require 'whois/answer/parser/base'
18
+
19
+
20
+ module Whois
21
+ class Answer
22
+ class Parser
23
+
24
+ #
25
+ # = whois.eu.org parser
26
+ #
27
+ # Parser for the whois.eu.org server.
28
+ #
29
+ # NOTE: This parser is just a stub and provides only a few basic methods
30
+ # to check for domain availability and get domain status.
31
+ # Please consider to contribute implementing missing methods.
32
+ # See WhoisNicIt parser for an explanation of all available methods
33
+ # and examples.
34
+ #
35
+ class WhoisEuOrg < Base
36
+
37
+ register_method :status do
38
+ if available?
39
+ :available
40
+ else
41
+ :registered
42
+ end
43
+ end
44
+
45
+ register_method :available? do
46
+ @available ||= !!(content.to_s =~ /Key not found/)
47
+ end
48
+
49
+ register_method :registered? do
50
+ !available?
51
+ end
52
+
53
+
54
+ # TODO: NotAvailable (or anniversary?)
55
+ register_method :created_on do
56
+ nil
57
+ end
58
+
59
+ # TODO: NotAvailable (or anniversary?)
60
+ register_method :updated_on do
61
+ nil
62
+ end
63
+
64
+ # TODO: NotAvailable (or anniversary?)
65
+ register_method :expires_on do
66
+ nil
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,75 @@
1
+ #
2
+ # = Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ #
7
+ # Category:: Net
8
+ # Package:: Whois
9
+ # Author:: Simone Carletti <weppos@weppos.net>
10
+ # License:: MIT License
11
+ #
12
+ #--
13
+ #
14
+ #++
15
+
16
+
17
+ require 'whois/answer/parser/base'
18
+
19
+
20
+ module Whois
21
+ class Answer
22
+ class Parser
23
+
24
+ #
25
+ # = whois.iana.org parser
26
+ #
27
+ # Parser for the whois.iana.org server.
28
+ #
29
+ # NOTE: This parser is just a stub and provides only a few basic methods
30
+ # to check for domain availability and get domain status.
31
+ # Please consider to contribute implementing missing methods.
32
+ # See WhoisNicIt parser for an explanation of all available methods
33
+ # and examples.
34
+ #
35
+ class WhoisIanaOrg < Base
36
+
37
+ register_method :status do
38
+ if available?
39
+ :available
40
+ else
41
+ :registered
42
+ end
43
+ end
44
+
45
+ register_method :available? do
46
+ @available ||= !!(content.to_s =~ /Domain (.*?) not found/)
47
+ end
48
+
49
+ register_method :registered? do
50
+ !available?
51
+ end
52
+
53
+
54
+ register_method :created_on do
55
+ @created_on ||= if content.to_s =~ /\nRegistration Date:\s+(.*)\n/
56
+ Time.parse($1)
57
+ end
58
+ end
59
+
60
+ register_method :updated_on do
61
+ @updated_on ||= if content.to_s =~ /\nLast Updated Date:\s+(.*)\n/
62
+ Time.parse($1)
63
+ end
64
+ end
65
+
66
+ # TODO: NotAvailable
67
+ register_method :expires_on do
68
+ nil
69
+ end
70
+
71
+ end
72
+
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,74 @@
1
+ #
2
+ # = Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ #
7
+ # Category:: Net
8
+ # Package:: Whois
9
+ # Author:: Simone Carletti <weppos@weppos.net>
10
+ # License:: MIT License
11
+ #
12
+ #--
13
+ #
14
+ #++
15
+
16
+
17
+ require 'whois/answer/parser/base'
18
+
19
+
20
+ module Whois
21
+ class Answer
22
+ class Parser
23
+
24
+ #
25
+ # = whois.nic.asias parser
26
+ #
27
+ # Parser for the whois.nic.asias server.
28
+ #
29
+ # NOTE: This parser is just a stub and provides only a few basic methods
30
+ # to check for domain availability and get domain status.
31
+ # Please consider to contribute implementing missing methods.
32
+ # See WhoisNicIt parser for an explanation of all available methods
33
+ # and examples.
34
+ #
35
+ class WhoisNicAsia < Base
36
+
37
+ register_method :status do
38
+ @status ||= if content.to_s =~ /Domain Status:(.*?)[\r\n]+/
39
+ $1.downcase.to_sym
40
+ end
41
+ end
42
+
43
+ register_method :available? do
44
+ @available ||= (content.to_s.strip == "NOT FOUND")
45
+ end
46
+
47
+ register_method :registered? do
48
+ !available?
49
+ end
50
+
51
+
52
+ register_method :created_on do
53
+ @created_on ||= if content.to_s =~ /Domain Create Date:(.*?)[\r\n]+/
54
+ Time.parse($1)
55
+ end
56
+ end
57
+
58
+ register_method :updated_on do
59
+ @updated_on ||= if content.to_s =~ /Domain Last Updated Date:(.*?)[\r\n]+/
60
+ Time.parse($1)
61
+ end
62
+ end
63
+
64
+ register_method :expires_on do
65
+ @expires_on ||= if content.to_s =~ /Domain Expiration Date:(.*?)[\r\n]+/
66
+ Time.parse($1)
67
+ end
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,77 @@
1
+ #
2
+ # = Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ #
7
+ # Category:: Net
8
+ # Package:: Whois
9
+ # Author:: Simone Carletti <weppos@weppos.net>
10
+ # License:: MIT License
11
+ #
12
+ #--
13
+ #
14
+ #++
15
+
16
+
17
+ require 'whois/answer/parser/base'
18
+
19
+
20
+ module Whois
21
+ class Answer
22
+ class Parser
23
+
24
+ #
25
+ # = whois.nic.fr parser
26
+ #
27
+ # Parser for the whois.nic.fr server.
28
+ #
29
+ # NOTE: This parser is just a stub and provides only a few basic methods
30
+ # to check for domain availability and get domain status.
31
+ # Please consider to contribute implementing missing methods.
32
+ # See WhoisNicIt parser for an explanation of all available methods
33
+ # and examples.
34
+ #
35
+ class WhoisNicFr < Base
36
+
37
+ register_method :status do
38
+ @status ||= if content.to_s =~ /status:\s+(.*)\n/
39
+ $1.downcase.to_sym
40
+ else
41
+ :available
42
+ end
43
+ end
44
+
45
+ register_method :available? do
46
+ @available ||= !!(content.to_s =~ /No entries found in the AFNIC Database/)
47
+ end
48
+
49
+ register_method :registered? do
50
+ !available?
51
+ end
52
+
53
+
54
+ register_method :created_on do
55
+ @created_on ||= if content.to_s =~ /created:\s+(.*)\n/
56
+ d, m, y = $1.split("/")
57
+ Time.parse("#{y}-#{m}-#{d}")
58
+ end
59
+ end
60
+
61
+ register_method :updated_on do
62
+ @updated_on ||= if content.to_s =~ /last-update:\s+(.*)\n/
63
+ d, m, y = $1.split("/")
64
+ Time.parse("#{y}-#{m}-#{d}")
65
+ end
66
+ end
67
+
68
+ # TODO: NotAvailable (or anniversary?)
69
+ register_method :expires_on do
70
+ nil
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,71 @@
1
+ #
2
+ # = Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ #
7
+ # Category:: Net
8
+ # Package:: Whois
9
+ # Author:: Simone Carletti <weppos@weppos.net>
10
+ # License:: MIT License
11
+ #
12
+ #--
13
+ #
14
+ #++
15
+
16
+
17
+ require 'whois/answer/parser/base'
18
+
19
+
20
+ module Whois
21
+ class Answer
22
+ class Parser
23
+
24
+ #
25
+ # = whois.nic.gov parser
26
+ #
27
+ # Parser for the whois.nic.gov server.
28
+ #
29
+ # NOTE: This parser is just a stub and provides only a few basic methods
30
+ # to check for domain availability and get domain status.
31
+ # Please consider to contribute implementing missing methods.
32
+ # See WhoisNicIt parser for an explanation of all available methods
33
+ # and examples.
34
+ #
35
+ class WhoisNicGov < Base
36
+
37
+ register_method :status do
38
+ @status ||= if content.to_s =~ /Status:\s(.*?)[\r\n]+/
39
+ $1.downcase.to_sym
40
+ end
41
+ end
42
+
43
+ register_method :available? do
44
+ !registered?
45
+ end
46
+
47
+ register_method :registered? do
48
+ @registered ||= (content.to_s =~ /Domain Name:/)
49
+ end
50
+
51
+
52
+ # TODO: NotAvailable
53
+ register_method :created_on do
54
+ nil
55
+ end
56
+
57
+ # TODO: NotAvailable
58
+ register_method :updated_on do
59
+ nil
60
+ end
61
+
62
+ # TODO: NotAvailable
63
+ register_method :expires_on do
64
+ nil
65
+ end
66
+
67
+ end
68
+
69
+ end
70
+ end
71
+ end