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
data/CHANGELOG.rdoc CHANGED
@@ -1,6 +1,67 @@
1
1
  = Changelog
2
2
 
3
3
 
4
+ == Release 0.9.0
5
+
6
+ * FIXED: .ec TLD has a whois server (closes #322)
7
+
8
+ * FIXED: .gl TLD has a whois server (closes #323)
9
+
10
+ * FIXED: .md TLD has a whois server (closes #325)
11
+
12
+ * FIXED: TLD definitions for whois.afilias-grs.info missing proper adapter (closes #342)
13
+
14
+ * FIXED: ./bin/ruby-whois uses the Gem instead of current version (closes #344)
15
+
16
+ * FIXED: Whois::Client doesn't cast qstring to_s (closes #339)
17
+
18
+ * FIXED: Whois::Parser doesn't detect preloaded parsers. Improved performances skipping unnecessary 'require'. (closes #340)
19
+
20
+ * ADDED: Simple .fr TLD parser.
21
+
22
+ * ADDED: Simple .name TLD parser.
23
+
24
+ * ADDED: Simple .ie TLD parser.
25
+
26
+ * ADDED: Simple .edu TLD parser.
27
+
28
+ * ADDED: Simple .info TLD parser.
29
+
30
+ * ADDED: Simple .gov TLD parser.
31
+
32
+ * ADDED: Simple .za.net TLD parser.
33
+
34
+ * ADDED: Simple .eu.org TLD parser.
35
+
36
+ * ADDED: Simple .za.org TLD parser.
37
+
38
+ * ADDED: Simple .int/.arpa TLD parser.
39
+
40
+ * ADDED: Simple .aero TLD parser.
41
+
42
+ * ADDED: Simple .asia TLD parser.
43
+
44
+ * ADDED: Simple .bz/.gi/.hn/.lc/.mn/.sc/.vc TLD parser.
45
+
46
+ * ADDED: .tv TLD parser.
47
+
48
+ * ADDED: .hu TLD parser.
49
+
50
+ * ADDED: Ability to pass timeout option to 'ruby-whois' (closes #334)
51
+
52
+ * ADDED: Whois::Answer#properties returns an Hash of :key => value
53
+
54
+ * CHANGED: Removed Whois::BUILD and Whois::STATUS constants. Added Whois::Version::ALPHA constant to be used when I need to package prereleases (see RubyGem --prerelease flag).
55
+
56
+ * CHANGED: Extracted Whois::Answer::Parser::Ast module from existing parsers.
57
+
58
+ * CHANGED: Normalized WhoisDenicDe parser.
59
+
60
+ * CHANGED: Changed .edu TLD server to whois.educause.edu (see http://www.iana.org/domains/root/db/edu.html)
61
+
62
+ * CHANGED: Renamed #supported to #property_supported?
63
+
64
+
4
65
  == Release 0.8.1
5
66
 
6
67
  * FIXED: Updated the whois.denic.de parser to the new format. Thanks to David Krentzlin (closes #314)
data/Manifest CHANGED
@@ -15,12 +15,29 @@ lib/whois/answer.rb
15
15
  lib/whois/answer/contact.rb
16
16
  lib/whois/answer/parser.rb
17
17
  lib/whois/answer/parser/README.rdoc
18
+ lib/whois/answer/parser/ast.rb
18
19
  lib/whois/answer/parser/base.rb
19
20
  lib/whois/answer/parser/blank.rb
21
+ lib/whois/answer/parser/scanners/verisign.rb
22
+ lib/whois/answer/parser/whois.aero.rb
23
+ lib/whois/answer/parser/whois.afilias-grs.info.rb
24
+ lib/whois/answer/parser/whois.afilias.info.rb
20
25
  lib/whois/answer/parser/whois.crsnic.net.rb
21
26
  lib/whois/answer/parser/whois.denic.de.rb
27
+ lib/whois/answer/parser/whois.domainregistry.ie.rb
28
+ lib/whois/answer/parser/whois.educause.edu.rb
29
+ lib/whois/answer/parser/whois.eu.org.rb
30
+ lib/whois/answer/parser/whois.iana.org.rb
31
+ lib/whois/answer/parser/whois.nic.asia.rb
32
+ lib/whois/answer/parser/whois.nic.fr.rb
33
+ lib/whois/answer/parser/whois.nic.gov.rb
34
+ lib/whois/answer/parser/whois.nic.hu.rb
22
35
  lib/whois/answer/parser/whois.nic.it.rb
36
+ lib/whois/answer/parser/whois.nic.name.rb
37
+ lib/whois/answer/parser/whois.nic.tv.rb
23
38
  lib/whois/answer/parser/whois.publicinterestregistry.net.rb
39
+ lib/whois/answer/parser/whois.za.net.rb
40
+ lib/whois/answer/parser/whois.za.org.rb
24
41
  lib/whois/answer/part.rb
25
42
  lib/whois/answer/registrar.rb
26
43
  lib/whois/answer/super_struct.rb
@@ -29,6 +46,7 @@ lib/whois/definitions/ipv4.rb
29
46
  lib/whois/definitions/ipv4.txt
30
47
  lib/whois/definitions/ipv6.rb
31
48
  lib/whois/definitions/ipv6.txt
49
+ lib/whois/definitions/tld.notes.txt
32
50
  lib/whois/definitions/tlds.rb
33
51
  lib/whois/definitions/tlds.txt
34
52
  lib/whois/errors.rb
@@ -48,15 +66,31 @@ lib/whois/whois.rb
48
66
  tasks/server.rake
49
67
  test/answer/parser/base_test.rb
50
68
  test/answer/parser/blank_test.rb
51
- test/answer/parser/whois_crsnic_net_test.rb
52
- test/answer/parser/whois_denic_de_test.rb
53
- test/answer/parser/whois_nic_it_test.rb
54
- test/answer/parser/whois_publicinterestregistry_net_test.rb
69
+ test/answer/parser/whois.aero_test.rb
70
+ test/answer/parser/whois.afilias-grs.info_test.rb
71
+ test/answer/parser/whois.afilias.info_test.rb
72
+ test/answer/parser/whois.crsnic.net_test.rb
73
+ test/answer/parser/whois.denic.de_test.rb
74
+ test/answer/parser/whois.domainregistry.ie_test.rb
75
+ test/answer/parser/whois.educause.edu_test.rb
76
+ test/answer/parser/whois.eu.org_test.rb
77
+ test/answer/parser/whois.iana.org_test.rb
78
+ test/answer/parser/whois.nic.asia_test.rb
79
+ test/answer/parser/whois.nic.fr_test.rb
80
+ test/answer/parser/whois.nic.gov_test.rb
81
+ test/answer/parser/whois.nic.hu_test.rb
82
+ test/answer/parser/whois.nic.it_test.rb
83
+ test/answer/parser/whois.nic.name_test.rb
84
+ test/answer/parser/whois.nic.tv_test.rb
85
+ test/answer/parser/whois.publicinterestregistry.net_test.rb
86
+ test/answer/parser/whois.za.net_test.rb
87
+ test/answer/parser/whois.za.org_test.rb
55
88
  test/answer/parser_test.rb
56
89
  test/answer_test.rb
57
90
  test/client_test.rb
58
91
  test/deprecated_test.rb
59
92
  test/integration_test.rb
93
+ test/list_tld
60
94
  test/server/adapters/afilias_test.rb
61
95
  test/server/adapters/base_test.rb
62
96
  test/server/adapters/formatted_test.rb
@@ -75,6 +109,27 @@ test/testcases/referrals/crsnic.com_one_server.txt
75
109
  test/testcases/referrals/niccc.cc.txt
76
110
  test/testcases/referrals/pir.org.txt
77
111
  test/testcases/responses/super_struct_test.rb
112
+ test/testcases/responses/whois.aero/available.txt
113
+ test/testcases/responses/whois.aero/registered.txt
114
+ test/testcases/responses/whois.afilias-grs.info/available.txt
115
+ test/testcases/responses/whois.afilias-grs.info/bz/available.txt
116
+ test/testcases/responses/whois.afilias-grs.info/bz/registered.txt
117
+ test/testcases/responses/whois.afilias-grs.info/gi/available.txt
118
+ test/testcases/responses/whois.afilias-grs.info/gi/registered.txt
119
+ test/testcases/responses/whois.afilias-grs.info/hn/available.txt
120
+ test/testcases/responses/whois.afilias-grs.info/hn/registered.txt
121
+ test/testcases/responses/whois.afilias-grs.info/lc/available.txt
122
+ test/testcases/responses/whois.afilias-grs.info/lc/registered.txt
123
+ test/testcases/responses/whois.afilias-grs.info/mn/available.txt
124
+ test/testcases/responses/whois.afilias-grs.info/mn/registered.txt
125
+ test/testcases/responses/whois.afilias-grs.info/registered.txt
126
+ test/testcases/responses/whois.afilias-grs.info/sc/available.txt
127
+ test/testcases/responses/whois.afilias-grs.info/sc/registered.txt
128
+ test/testcases/responses/whois.afilias-grs.info/vc/available.txt
129
+ test/testcases/responses/whois.afilias-grs.info/vc/registered.txt
130
+ test/testcases/responses/whois.afilias.info/available.txt
131
+ test/testcases/responses/whois.afilias.info/registered.txt
132
+ test/testcases/responses/whois.crsnic.net/MULTIPLE.txt
78
133
  test/testcases/responses/whois.crsnic.net/available.txt
79
134
  test/testcases/responses/whois.crsnic.net/registered.txt
80
135
  test/testcases/responses/whois.denic.de/1-10-0_available.txt
@@ -82,12 +137,40 @@ test/testcases/responses/whois.denic.de/1-10-0_registered.txt
82
137
  test/testcases/responses/whois.denic.de/available.txt
83
138
  test/testcases/responses/whois.denic.de/error_invalid_domain_name.txt
84
139
  test/testcases/responses/whois.denic.de/registered.txt
140
+ test/testcases/responses/whois.domainregistry.ie/available.txt
141
+ test/testcases/responses/whois.domainregistry.ie/registered.txt
142
+ test/testcases/responses/whois.educause.edu/available.txt
143
+ test/testcases/responses/whois.educause.edu/registered.txt
144
+ test/testcases/responses/whois.eu.org/available.txt
145
+ test/testcases/responses/whois.eu.org/registered.txt
146
+ test/testcases/responses/whois.iana.org/MULTIPLE.txt
147
+ test/testcases/responses/whois.iana.org/available.txt
148
+ test/testcases/responses/whois.iana.org/registered.txt
149
+ test/testcases/responses/whois.nic.asia/available.txt
150
+ test/testcases/responses/whois.nic.asia/registered.txt
151
+ test/testcases/responses/whois.nic.fr/MULTIPLE.txt
152
+ test/testcases/responses/whois.nic.fr/available.txt
153
+ test/testcases/responses/whois.nic.fr/registered.txt
154
+ test/testcases/responses/whois.nic.gov/available.txt
155
+ test/testcases/responses/whois.nic.gov/registered.txt
156
+ test/testcases/responses/whois.nic.hu/available.txt
157
+ test/testcases/responses/whois.nic.hu/in_progress.txt
158
+ test/testcases/responses/whois.nic.hu/registered.txt
85
159
  test/testcases/responses/whois.nic.it/available.txt
86
160
  test/testcases/responses/whois.nic.it/registered.txt
87
161
  test/testcases/responses/whois.nic.it/status_active.txt
88
162
  test/testcases/responses/whois.nic.it/status_available.txt
163
+ test/testcases/responses/whois.nic.name/available.txt
164
+ test/testcases/responses/whois.nic.name/registered.txt
165
+ test/testcases/responses/whois.nic.name/reserved.txt
166
+ test/testcases/responses/whois.nic.tv/available.txt
167
+ test/testcases/responses/whois.nic.tv/registered.txt
89
168
  test/testcases/responses/whois.publicinterestregistry.net/available.txt
90
169
  test/testcases/responses/whois.publicinterestregistry.net/registered.txt
170
+ test/testcases/responses/whois.za.net/available.txt
171
+ test/testcases/responses/whois.za.net/registered.txt
172
+ test/testcases/responses/whois.za.org/available.txt
173
+ test/testcases/responses/whois.za.org/registered.txt
91
174
  test/whois_test.rb
92
175
  utils/bm_delegation_vs_inheritance.rb
93
176
  utils/bm_shell_vs_pure.rb
data/README.rdoc CHANGED
@@ -17,7 +17,6 @@ An extensive test suite is available to verify the library correctness but you m
17
17
  * Powerful whois response parser
18
18
  * Support for ipv6, ipv4 and top level domain whois queries
19
19
  * Object oriented design
20
- * Compatible with older Whois version (Whois 0.4.2, see below)
21
20
  * Compatible with Ruby 1.8.6 and greater, including Ruby 1.9
22
21
 
23
22
 
@@ -36,8 +35,7 @@ Do you run any other Ruby platform or version? Are you experiencing any problem?
36
35
 
37
36
  == Installation
38
37
 
39
- This library is intended to be installed via the
40
- RubyGems[http://rubyforge.org/projects/rubygems/] system.
38
+ This library is intended to be installed as a Gem.
41
39
 
42
40
  $ gem install whois
43
41
 
@@ -77,16 +75,16 @@ The query method is stateless. For this reason, you can safely re-use the same c
77
75
  w.query("2001:db8::1428:57ab")
78
76
  w.query("google.it")
79
77
 
80
- If you just need a WHOIS response and you don't care about a full control of the WHOIS Client, Whois comes with a simple method called whois. This is the simplest way to send a WHOIS request.
78
+ If you just need a WHOIS response and you don't care about a full control of the WHOIS Client, <tt>Whois</tt> comes with a simple method called whois. This is the simplest way to send a WHOIS request.
81
79
 
82
80
  Whois.whois("google.com")
83
81
  # => #<Whois::Answer>
84
82
 
85
83
  === Consuming the Answer
86
84
 
87
- As of release 0.8, a WHOIS query no longer returns a simple string. Instead, you get a full Whois::Answer instance and this is just the beginning of the story.
85
+ As of release 0.8, a WHOIS query no longer returns a simple string. Instead, you get a full <tt>Whois::Answer</tt> instance and this is just the beginning of the story.
88
86
 
89
- Whois::Answer is a super powerful object. It encapsulates the full WHOIS answer and it provides you the ability to parse the WHOIS response with a full object oriented notation.
87
+ <tt>Whois::Answer</tt> is a super powerful object. It encapsulates the full WHOIS answer and it provides you the ability to parse the WHOIS response with a full object oriented notation.
90
88
 
91
89
  a = Whois.whois("google.it")
92
90
  # => #<Whois::Answer>
@@ -110,7 +108,7 @@ Whois::Answer is a super powerful object. It encapsulates the full WHOIS answer
110
108
  puts nameserver
111
109
  end
112
110
 
113
- This feature is made possible by the Whois answer parsers. Unfortunately, due to the lack of a global standard, each WHOIS server requires a specific parser. For this reason, the library doesn't support all existing WHOIS servers.
111
+ This feature is made possible by the <tt>Whois</tt> answer parsers. Unfortunately, due to the lack of a global standard, each WHOIS server requires a specific parser. For this reason, the library doesn't support all existing WHOIS servers.
114
112
 
115
113
  If you create a new parser, please consider releasing it to the public so that it can be included in a next version.
116
114
 
@@ -156,10 +154,16 @@ Ruby Whois 0.4.2 is released under the MIT license.
156
154
  Copyright (c) 2007 by Cyril Mougel (cyril.mougel@gmail.com)
157
155
 
158
156
 
159
- == Credits
157
+ == Author
160
158
 
161
159
  Author:: {Simone Carletti}[http://www.simonecarletti.com/] <weppos@weppos.net>
162
- Author (Whois 0.4):: {Cyril Mougel}[http://blog.shingara.fr/] <cyril.mougel@gmail.com>
160
+
161
+
162
+ == Thanks to
163
+
164
+ * {Cyril Mougel}[http://blog.shingara.fr/] <cyril.mougel@gmail.com> Author of the initial Whois GEM
165
+ * {Gábor Vészi}[http://well.done.hu/] .hu whois parser
166
+ * {Aaron Mueller}[http://aaron-mueller.de/] .de whois parser
163
167
 
164
168
 
165
169
  == FeedBack and Bug reports
data/Rakefile CHANGED
@@ -4,7 +4,8 @@ require 'rubygems'
4
4
  require 'rake'
5
5
  require 'echoe'
6
6
  require 'whois'
7
-
7
+ require 'rake/rdoctask'
8
+ require 'hanna/rdoctask'
8
9
 
9
10
  # Common package properties
10
11
  PKG_NAME = ENV['PKG_NAME'] || Whois::GEM
@@ -31,9 +32,11 @@ Echoe.new(PKG_NAME, PKG_VERSION) do |p|
31
32
  p.need_zip = true
32
33
 
33
34
  p.development_dependencies += ["rake ~>0.8",
35
+ "hanna ~>0.1.12",
34
36
  "echoe ~>3.1",
35
37
  "mocha ~>0.9"]
36
38
 
39
+ p.rdoc_options = ["--inline-source", "-T", "hanna"]
37
40
  p.rcov_options = ["-Itest -x mocha,rcov,Rakefile"]
38
41
  end
39
42
 
data/bin/ruby-whois CHANGED
@@ -1,37 +1,51 @@
1
1
  #!/usr/bin/env ruby -wKU
2
2
 
3
+ $:.unshift(File.dirname(__FILE__) + "/../lib")
4
+
3
5
  require 'optparse'
4
- require 'rubygems'
6
+ require 'ostruct'
5
7
  require 'whois'
6
8
 
7
- opts = OptionParser.new do |opts|
8
- opts.banner = "Whois: an intelligent pure Ruby Whois client"
9
- opts.define_head "Usage: whois [options] object"
10
- opts.separator ""
11
- opts.separator "Examples:"
12
- opts.separator " whois ruby-lang.com"
13
- opts.separator " whois 213.149.247.64"
14
- opts.separator ""
15
- opts.separator "Options:"
16
-
9
+
10
+ options = OpenStruct.new
11
+ OptionParser.new do |opts|
12
+ opts.banner = "Whois: an intelligent pure Ruby Whois client"
13
+ opts.define_head "Usage: whois [options] object"
14
+ opts.separator ""
15
+ opts.separator "Examples:"
16
+ opts.separator " whois ruby-lang.com"
17
+ opts.separator " whois 213.149.247.64"
18
+ opts.separator ""
19
+ opts.separator "Options:"
20
+
21
+ opts.on("-t", "--timeout [SECONDS]", Integer, "Specify the timeout value") do |seconds|
22
+ options.timeout = seconds
23
+ end
24
+
17
25
  opts.on_tail("--help", "Show this message") do
18
26
  puts opts
19
27
  exit
20
28
  end
21
-
22
- opts.on_tail("-V", "--version", "Show version") do
29
+
30
+ opts.on_tail("-v", "--version", "Show version") do
23
31
  puts "#{Whois::NAME} #{Whois::VERSION}"
24
32
  exit
25
33
  end
34
+
35
+ begin
36
+ opts.parse!
37
+ rescue OptionParser::ParseError
38
+ puts opts
39
+ exit 1
40
+ end
41
+
42
+ if ARGV.size.zero?
43
+ puts opts
44
+ exit 1
45
+ end
26
46
  end
27
- opts.parse!
28
-
47
+
29
48
  qstring = ARGV.shift
30
49
 
31
- if qstring.to_s.strip.empty?
32
- puts opts
33
- exit 1
34
- end
35
-
36
- @client = Whois::Client.new
50
+ @client = Whois::Client.new(:timeout => options.timeout)
37
51
  puts @client.query(qstring)
data/lib/whois.rb CHANGED
@@ -98,4 +98,10 @@ module Whois
98
98
  Client.new.query(qstring)
99
99
  end
100
100
 
101
+
102
+ def self.deprecate(message = nil)
103
+ message ||= "You are using deprecated behavior which will be removed from the next major or minor release."
104
+ $stderr.puts("DEPRECATION WARNING: #{message}")
105
+ end
106
+
101
107
  end
data/lib/whois/answer.rb CHANGED
@@ -30,21 +30,27 @@ module Whois
30
30
  @server = server
31
31
  end
32
32
 
33
-
33
+
34
34
  def to_s
35
35
  content.to_s
36
36
  end
37
-
37
+
38
38
  def inspect
39
39
  content.inspect
40
40
  end
41
-
41
+
42
42
  # Invokes <tt>match</tt> on answer <tt>@content</tt>
43
43
  # and returns the <tt>MatchData</tt> or <tt>nil</tt>.
44
44
  def match(pattern)
45
45
  content.match(pattern)
46
46
  end
47
-
47
+
48
+ # Invokes <tt>match</tt> and returns <tt>true</tt> if <tt>pattern</tt>
49
+ # matches <tt>@content</tt>, <tt>false</tt> otherwise.
50
+ def match?(pattern)
51
+ !content.match(pattern).nil?
52
+ end
53
+
48
54
  # Returns true if the <tt>object</tt> is the same object,
49
55
  # or is a string and has the same content.
50
56
  def ==(other)
@@ -53,7 +59,7 @@ module Whois
53
59
  (other.instance_of?(String) && other == self.to_s) ||
54
60
  (other.instance_of?(Answer) && other.to_s == self.to_s)
55
61
  end
56
-
62
+
57
63
  # Delegates to ==.
58
64
  def eql?(other)
59
65
  self == other
@@ -97,23 +103,33 @@ module Whois
97
103
  end
98
104
 
99
105
 
100
- # Invokes <tt>match</tt> and returns <tt>true</tt> if <tt>pattern</tt>
101
- # matches <tt>@content</tt>, <tt>false</tt> otherwise.
102
- def match?(pattern)
103
- !content.match(pattern).nil?
104
- end
105
-
106
106
 
107
107
  # Lazy-loads and returns a <tt>Whois::Answer::Parser</tt> proxy for current answer.
108
108
  def parser
109
109
  @parser ||= Parser.new(self)
110
110
  end
111
111
 
112
+
113
+ # Returns a Hash containing all supported properties for this Answer
114
+ # along with corresponding values.
115
+ def properties
116
+ list = Parser.properties.inject([]) do |l,a|
117
+ l.concat([a, send(a)]) if property_supported?(a)
118
+ l
119
+ end
120
+ Hash[*list]
121
+ end
122
+
112
123
  # Returns <tt>true</tt> if the <tt>property</tt> passed as symbol
113
124
  # is supported by any available parser for this answer.
114
125
  # See also <tt>Whois::Answer::Parser.supported?</tt>.
115
- def supported?(property)
116
- parser.supported?(property)
126
+ def property_supported?(property)
127
+ parser.property_supported?(property)
128
+ end
129
+
130
+ def supported?(*args)
131
+ ::Whois.deprecate "supported? is deprecated. Use property_supported? instead."
132
+ property_supported?(*args)
117
133
  end
118
134
 
119
135
 
@@ -121,7 +137,7 @@ module Whois
121
137
 
122
138
  # Delegates all method calls to the internal parser.
123
139
  def method_missing(method, *args, &block)
124
- if Parser.registrable_methods.include?(method)
140
+ if Parser.properties.include?(method)
125
141
  parser.send(method, *args, &block)
126
142
  else
127
143
  super