whois 1.1.8 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (143) hide show
  1. data/CHANGELOG.rdoc +13 -0
  2. data/Manifest +116 -113
  3. data/lib/whois/answer.rb +15 -5
  4. data/lib/whois/answer/parser.rb +1 -1
  5. data/lib/whois/answer/parser/NOTES.txt +1 -0
  6. data/lib/whois/answer/parser/base.rb +13 -1
  7. data/lib/whois/answer/parser/whois.nic.hu.rb +101 -78
  8. data/lib/whois/answer/parser/whois.nic.tr.rb +1 -1
  9. data/lib/whois/answer/parser/whois.publicinterestregistry.net.rb +22 -11
  10. data/lib/whois/server.rb +19 -15
  11. data/lib/whois/server/adapters/afilias.rb +1 -1
  12. data/lib/whois/server/adapters/arpa.rb +6 -6
  13. data/lib/whois/server/adapters/base.rb +1 -1
  14. data/lib/whois/server/adapters/formatted.rb +4 -4
  15. data/lib/whois/server/adapters/none.rb +5 -6
  16. data/lib/whois/server/adapters/not_implemented.rb +6 -4
  17. data/lib/whois/server/adapters/pir.rb +1 -1
  18. data/lib/whois/server/adapters/standard.rb +2 -2
  19. data/lib/whois/server/adapters/verisign.rb +3 -3
  20. data/lib/whois/server/adapters/web.rb +6 -7
  21. data/lib/whois/version.rb +2 -2
  22. data/test/testcases/responses/UTF8.txt +2 -0
  23. data/test/testcases/responses/whois.dns.pt/registered.txt +3 -3
  24. data/test/testcases/responses/whois.nic.hu/current/available.txt +3 -0
  25. data/test/testcases/responses/whois.nic.hu/current/registered.txt +9 -0
  26. data/test/testcases/responses/whois.nic.hu/{available.txt → v1.99/available.txt} +0 -0
  27. data/test/testcases/responses/whois.nic.hu/{in_progress.txt → v1.99/in_progress.txt} +0 -0
  28. data/test/testcases/responses/whois.nic.hu/{property_registrant_as_company.txt → v1.99/property_registrant_as_company.txt} +0 -0
  29. data/test/testcases/responses/whois.nic.hu/{property_registrant_as_private_person.txt → v1.99/property_registrant_as_private_person.txt} +0 -0
  30. data/test/testcases/responses/whois.nic.hu/{property_registrant_without_address.txt → v1.99/property_registrant_without_address.txt} +0 -0
  31. data/test/testcases/responses/whois.nic.hu/{registered.txt → v1.99/registered.txt} +0 -0
  32. data/test/testcases/responses/whois.nic.tr/property_nameservers_with_trailing_space.txt +42 -0
  33. data/test/testcases/responses/whois.nic.tr/registered.txt +6 -6
  34. data/test/testcases/responses/whois.publicinterestregistry.net/throttle.txt +1 -0
  35. data/test/{answer → whois/answer}/contact_test.rb +0 -0
  36. data/test/{answer → whois/answer}/parser/base_test.rb +5 -0
  37. data/test/{answer → whois/answer}/parser/blank_test.rb +0 -0
  38. data/test/{answer → whois/answer}/parser/jobswhois.verisign-grs.com_test.rb +0 -0
  39. data/test/{answer → whois/answer}/parser/whois.adamsnames.tc_test.rb +0 -0
  40. data/test/{answer → whois/answer}/parser/whois.aeda.net.ae_test.rb +0 -0
  41. data/test/{answer → whois/answer}/parser/whois.aero_test.rb +0 -0
  42. data/test/{answer → whois/answer}/parser/whois.afilias-grs.info_test.rb +0 -0
  43. data/test/{answer → whois/answer}/parser/whois.afilias.info_test.rb +0 -0
  44. data/test/{answer → whois/answer}/parser/whois.ai_test.rb +0 -0
  45. data/test/{answer → whois/answer}/parser/whois.arnes.si_test.rb +0 -0
  46. data/test/{answer → whois/answer}/parser/whois.ausregistry.net.au_test.rb +0 -0
  47. data/test/{answer → whois/answer}/parser/whois.biz_test.rb +0 -0
  48. data/test/{answer → whois/answer}/parser/whois.cat_test.rb +0 -0
  49. data/test/{answer → whois/answer}/parser/whois.cira.ca_test.rb +0 -0
  50. data/test/{answer → whois/answer}/parser/whois.cnnic.cn_test.rb +0 -0
  51. data/test/{answer → whois/answer}/parser/whois.cnnic.net.cn_test.rb +0 -0
  52. data/test/{answer → whois/answer}/parser/whois.crsnic.net_test.rb +0 -0
  53. data/test/{answer → whois/answer}/parser/whois.denic.de_test.rb +0 -0
  54. data/test/{answer → whois/answer}/parser/whois.dk-hostmaster.dk_test.rb +0 -0
  55. data/test/{answer → whois/answer}/parser/whois.dns.be_test.rb +0 -0
  56. data/test/{answer → whois/answer}/parser/whois.dns.lu_test.rb +0 -0
  57. data/test/{answer → whois/answer}/parser/whois.dns.pt_test.rb +0 -0
  58. data/test/{answer → whois/answer}/parser/whois.domain-registry.nl_test.rb +0 -0
  59. data/test/{answer → whois/answer}/parser/whois.domainregistry.ie_test.rb +0 -0
  60. data/test/{answer → whois/answer}/parser/whois.domreg.lt_test.rb +0 -0
  61. data/test/{answer → whois/answer}/parser/whois.dot.tk_test.rb +0 -0
  62. data/test/{answer → whois/answer}/parser/whois.dotmobiregistry.net_test.rb +0 -0
  63. data/test/{answer → whois/answer}/parser/whois.educause.edu_test.rb +0 -0
  64. data/test/{answer → whois/answer}/parser/whois.eu.org_test.rb +0 -0
  65. data/test/{answer → whois/answer}/parser/whois.eu_test.rb +0 -0
  66. data/test/{answer → whois/answer}/parser/whois.hkdnr.net.hk_test.rb +0 -0
  67. data/test/{answer → whois/answer}/parser/whois.iana.org_test.rb +0 -0
  68. data/test/{answer → whois/answer}/parser/whois.in.ua_test.rb +0 -0
  69. data/test/{answer → whois/answer}/parser/whois.isnic.is_test.rb +0 -0
  70. data/test/{answer → whois/answer}/parser/whois.jprs.jp_test.rb +0 -0
  71. data/test/{answer → whois/answer}/parser/whois.meregistry.net_test.rb +0 -0
  72. data/test/{answer → whois/answer}/parser/whois.museum_test.rb +0 -0
  73. data/test/{answer → whois/answer}/parser/whois.net.ua_test.rb +0 -0
  74. data/test/{answer → whois/answer}/parser/whois.nic-se.se_test.rb +0 -0
  75. data/test/{answer → whois/answer}/parser/whois.nic.ac_test.rb +0 -0
  76. data/test/{answer → whois/answer}/parser/whois.nic.af_test.rb +0 -0
  77. data/test/{answer → whois/answer}/parser/whois.nic.ag_test.rb +0 -0
  78. data/test/{answer → whois/answer}/parser/whois.nic.am_test.rb +0 -0
  79. data/test/{answer → whois/answer}/parser/whois.nic.as_test.rb +0 -0
  80. data/test/{answer → whois/answer}/parser/whois.nic.asia_test.rb +0 -0
  81. data/test/{answer → whois/answer}/parser/whois.nic.at_test.rb +0 -0
  82. data/test/{answer → whois/answer}/parser/whois.nic.cc_test.rb +0 -0
  83. data/test/{answer → whois/answer}/parser/whois.nic.cd_test.rb +0 -0
  84. data/test/{answer → whois/answer}/parser/whois.nic.ch_test.rb +0 -0
  85. data/test/{answer → whois/answer}/parser/whois.nic.coop_test.rb +0 -0
  86. data/test/{answer → whois/answer}/parser/whois.nic.fr_test.rb +0 -0
  87. data/test/{answer → whois/answer}/parser/whois.nic.gl_test.rb +0 -0
  88. data/test/{answer → whois/answer}/parser/whois.nic.gov_test.rb +0 -0
  89. data/test/{answer → whois/answer}/parser/whois.nic.ht_test.rb +0 -0
  90. data/test/{answer → whois/answer}/parser/whois.nic.hu_test.rb +83 -54
  91. data/test/{answer → whois/answer}/parser/whois.nic.im_test.rb +0 -0
  92. data/test/{answer → whois/answer}/parser/whois.nic.io_test.rb +0 -0
  93. data/test/{answer → whois/answer}/parser/whois.nic.it_test.rb +0 -0
  94. data/test/{answer → whois/answer}/parser/whois.nic.lv_test.rb +0 -0
  95. data/test/{answer → whois/answer}/parser/whois.nic.ly_test.rb +0 -0
  96. data/test/{answer → whois/answer}/parser/whois.nic.mu_test.rb +0 -0
  97. data/test/{answer → whois/answer}/parser/whois.nic.mx_test.rb +0 -0
  98. data/test/{answer → whois/answer}/parser/whois.nic.name_test.rb +0 -0
  99. data/test/{answer → whois/answer}/parser/whois.nic.nu_test.rb +0 -0
  100. data/test/{answer → whois/answer}/parser/whois.nic.or.kr_test.rb +0 -0
  101. data/test/{answer → whois/answer}/parser/whois.nic.sn_test.rb +0 -0
  102. data/test/{answer → whois/answer}/parser/whois.nic.st_test.rb +0 -0
  103. data/test/{answer → whois/answer}/parser/whois.nic.tel_test.rb +0 -0
  104. data/test/{answer → whois/answer}/parser/whois.nic.tl_test.rb +0 -0
  105. data/test/{answer → whois/answer}/parser/whois.nic.tr_test.rb +7 -0
  106. data/test/{answer → whois/answer}/parser/whois.nic.travel_test.rb +0 -0
  107. data/test/{answer → whois/answer}/parser/whois.nic.tv_test.rb +0 -0
  108. data/test/{answer → whois/answer}/parser/whois.nic.uk_test.rb +0 -0
  109. data/test/{answer → whois/answer}/parser/whois.nic.us_test.rb +0 -0
  110. data/test/{answer → whois/answer}/parser/whois.nic.ve_test.rb +0 -0
  111. data/test/{answer → whois/answer}/parser/whois.norid.no_test.rb +0 -0
  112. data/test/{answer → whois/answer}/parser/whois.pandi.or.id_test.rb +0 -0
  113. data/test/{answer → whois/answer}/parser/whois.publicinterestregistry.net_test.rb +6 -0
  114. data/test/{answer → whois/answer}/parser/whois.register.bg_test.rb +0 -0
  115. data/test/{answer → whois/answer}/parser/whois.registro.br_test.rb +0 -0
  116. data/test/{answer → whois/answer}/parser/whois.registry.in_test.rb +0 -0
  117. data/test/{answer → whois/answer}/parser/whois.registrypro.pro_test.rb +0 -0
  118. data/test/{answer → whois/answer}/parser/whois.ripe.net_test.rb +0 -0
  119. data/test/{answer → whois/answer}/parser/whois.ripn.net_test.rb +0 -0
  120. data/test/{answer → whois/answer}/parser/whois.rotld.ro_test.rb +0 -0
  121. data/test/{answer → whois/answer}/parser/whois.samoanic.ws_test.rb +0 -0
  122. data/test/{answer → whois/answer}/parser/whois.srs.net.nz_test.rb +0 -0
  123. data/test/{answer → whois/answer}/parser/whois.za.net_test.rb +0 -0
  124. data/test/{answer → whois/answer}/parser/whois.za.org_test.rb +0 -0
  125. data/test/{answer → whois/answer}/parser_test.rb +0 -0
  126. data/test/{testcases/responses → whois/answer}/super_struct_test.rb +0 -0
  127. data/test/{answer_test.rb → whois/answer_test.rb} +6 -0
  128. data/test/{client_test.rb → whois/client_test.rb} +0 -0
  129. data/test/{errors_test.rb → whois/errors_test.rb} +0 -0
  130. data/test/{integration_test.rb → whois/integration_test.rb} +0 -0
  131. data/test/{server → whois/server}/adapters/afilias_test.rb +1 -1
  132. data/test/{server → whois/server}/adapters/base_test.rb +0 -0
  133. data/test/{server → whois/server}/adapters/formatted_test.rb +0 -0
  134. data/test/{server → whois/server}/adapters/none_test.rb +0 -0
  135. data/test/{server → whois/server}/adapters/not_implemented_test.rb +0 -0
  136. data/test/{server → whois/server}/adapters/pir_test.rb +1 -1
  137. data/test/{server → whois/server}/adapters/standard_test.rb +0 -0
  138. data/test/{server → whois/server}/adapters/verisign_test.rb +3 -3
  139. data/test/{server → whois/server}/adapters/web_test.rb +0 -0
  140. data/test/{server_test.rb → whois/server_test.rb} +0 -0
  141. data/whois.gemspec +4 -4
  142. metadata +227 -225
  143. data/test/deprecated_test.rb +0 -61
data/CHANGELOG.rdoc CHANGED
@@ -1,6 +1,19 @@
1
1
  = Changelog
2
2
 
3
3
 
4
+ == Release 1.2.0
5
+
6
+ * NEW: Whois::Answer#throttle? returns true in case of throttle response (see whois.publicinternetregistry.com for a real example)
7
+
8
+ * FIXED: With some .tr domains, whois.nic.tr parser returns inconsistent values for nameservers.
9
+
10
+ * FIXED: Unexpected token error when trying to parse a .hu whois response. The whois.nic.hu has changed response format.
11
+
12
+ * FIXED: RuntimeError "Unexpected token: WHOIS LIMIT EXCEEDED - SEE WWW.PIR.ORG/WHOIS FOR DETAILS" for whois.publicinternetregistry.com
13
+
14
+ * CHANGED: Lazy-load adapters using Ruby autoload feature.
15
+
16
+
4
17
  == Release 1.1.8
5
18
 
6
19
  * NEW: Added simple .pt TLD parser (whois.dns.pt).
data/Manifest CHANGED
@@ -132,113 +132,7 @@ lib/whois/server/adapters/verisign.rb
132
132
  lib/whois/server/adapters/web.rb
133
133
  lib/whois/version.rb
134
134
  tasks/server.rake
135
- test/answer/contact_test.rb
136
- test/answer/parser/base_test.rb
137
- test/answer/parser/blank_test.rb
138
- test/answer/parser/jobswhois.verisign-grs.com_test.rb
139
- test/answer/parser/whois.adamsnames.tc_test.rb
140
- test/answer/parser/whois.aeda.net.ae_test.rb
141
- test/answer/parser/whois.aero_test.rb
142
- test/answer/parser/whois.afilias-grs.info_test.rb
143
- test/answer/parser/whois.afilias.info_test.rb
144
- test/answer/parser/whois.ai_test.rb
145
- test/answer/parser/whois.arnes.si_test.rb
146
- test/answer/parser/whois.ausregistry.net.au_test.rb
147
- test/answer/parser/whois.biz_test.rb
148
- test/answer/parser/whois.cat_test.rb
149
- test/answer/parser/whois.cira.ca_test.rb
150
- test/answer/parser/whois.cnnic.cn_test.rb
151
- test/answer/parser/whois.cnnic.net.cn_test.rb
152
- test/answer/parser/whois.crsnic.net_test.rb
153
- test/answer/parser/whois.denic.de_test.rb
154
- test/answer/parser/whois.dk-hostmaster.dk_test.rb
155
- test/answer/parser/whois.dns.be_test.rb
156
- test/answer/parser/whois.dns.lu_test.rb
157
- test/answer/parser/whois.dns.pt_test.rb
158
- test/answer/parser/whois.domain-registry.nl_test.rb
159
- test/answer/parser/whois.domainregistry.ie_test.rb
160
- test/answer/parser/whois.domreg.lt_test.rb
161
- test/answer/parser/whois.dot.tk_test.rb
162
- test/answer/parser/whois.dotmobiregistry.net_test.rb
163
- test/answer/parser/whois.educause.edu_test.rb
164
- test/answer/parser/whois.eu.org_test.rb
165
- test/answer/parser/whois.eu_test.rb
166
- test/answer/parser/whois.hkdnr.net.hk_test.rb
167
- test/answer/parser/whois.iana.org_test.rb
168
- test/answer/parser/whois.in.ua_test.rb
169
- test/answer/parser/whois.isnic.is_test.rb
170
- test/answer/parser/whois.jprs.jp_test.rb
171
- test/answer/parser/whois.meregistry.net_test.rb
172
- test/answer/parser/whois.museum_test.rb
173
- test/answer/parser/whois.net.ua_test.rb
174
- test/answer/parser/whois.nic-se.se_test.rb
175
- test/answer/parser/whois.nic.ac_test.rb
176
- test/answer/parser/whois.nic.af_test.rb
177
- test/answer/parser/whois.nic.ag_test.rb
178
- test/answer/parser/whois.nic.am_test.rb
179
- test/answer/parser/whois.nic.as_test.rb
180
- test/answer/parser/whois.nic.asia_test.rb
181
- test/answer/parser/whois.nic.at_test.rb
182
- test/answer/parser/whois.nic.cc_test.rb
183
- test/answer/parser/whois.nic.cd_test.rb
184
- test/answer/parser/whois.nic.ch_test.rb
185
- test/answer/parser/whois.nic.coop_test.rb
186
- test/answer/parser/whois.nic.fr_test.rb
187
- test/answer/parser/whois.nic.gl_test.rb
188
- test/answer/parser/whois.nic.gov_test.rb
189
- test/answer/parser/whois.nic.ht_test.rb
190
- test/answer/parser/whois.nic.hu_test.rb
191
- test/answer/parser/whois.nic.im_test.rb
192
- test/answer/parser/whois.nic.io_test.rb
193
- test/answer/parser/whois.nic.it_test.rb
194
- test/answer/parser/whois.nic.lv_test.rb
195
- test/answer/parser/whois.nic.ly_test.rb
196
- test/answer/parser/whois.nic.mu_test.rb
197
- test/answer/parser/whois.nic.mx_test.rb
198
- test/answer/parser/whois.nic.name_test.rb
199
- test/answer/parser/whois.nic.nu_test.rb
200
- test/answer/parser/whois.nic.or.kr_test.rb
201
- test/answer/parser/whois.nic.sn_test.rb
202
- test/answer/parser/whois.nic.st_test.rb
203
- test/answer/parser/whois.nic.tel_test.rb
204
- test/answer/parser/whois.nic.tl_test.rb
205
- test/answer/parser/whois.nic.tr_test.rb
206
- test/answer/parser/whois.nic.travel_test.rb
207
- test/answer/parser/whois.nic.tv_test.rb
208
- test/answer/parser/whois.nic.uk_test.rb
209
- test/answer/parser/whois.nic.us_test.rb
210
- test/answer/parser/whois.nic.ve_test.rb
211
- test/answer/parser/whois.norid.no_test.rb
212
- test/answer/parser/whois.pandi.or.id_test.rb
213
- test/answer/parser/whois.publicinterestregistry.net_test.rb
214
- test/answer/parser/whois.register.bg_test.rb
215
- test/answer/parser/whois.registro.br_test.rb
216
- test/answer/parser/whois.registry.in_test.rb
217
- test/answer/parser/whois.registrypro.pro_test.rb
218
- test/answer/parser/whois.ripe.net_test.rb
219
- test/answer/parser/whois.ripn.net_test.rb
220
- test/answer/parser/whois.rotld.ro_test.rb
221
- test/answer/parser/whois.samoanic.ws_test.rb
222
- test/answer/parser/whois.srs.net.nz_test.rb
223
- test/answer/parser/whois.za.net_test.rb
224
- test/answer/parser/whois.za.org_test.rb
225
- test/answer/parser_test.rb
226
- test/answer_test.rb
227
- test/client_test.rb
228
- test/deprecated_test.rb
229
- test/errors_test.rb
230
- test/integration_test.rb
231
135
  test/list_tld
232
- test/server/adapters/afilias_test.rb
233
- test/server/adapters/base_test.rb
234
- test/server/adapters/formatted_test.rb
235
- test/server/adapters/none_test.rb
236
- test/server/adapters/not_implemented_test.rb
237
- test/server/adapters/pir_test.rb
238
- test/server/adapters/standard_test.rb
239
- test/server/adapters/verisign_test.rb
240
- test/server/adapters/web_test.rb
241
- test/server_test.rb
242
136
  test/test_helper.rb
243
137
  test/testcases/referrals/afilias.bz.txt
244
138
  test/testcases/referrals/crsnic.com.txt
@@ -250,7 +144,6 @@ test/testcases/responses/UTF8.txt
250
144
  test/testcases/responses/jobswhois.verisign-grs.com/available.txt
251
145
  test/testcases/responses/jobswhois.verisign-grs.com/property_registrar.txt
252
146
  test/testcases/responses/jobswhois.verisign-grs.com/registered.txt
253
- test/testcases/responses/super_struct_test.rb
254
147
  test/testcases/responses/whois.adamsnames.tc/gd/available.txt
255
148
  test/testcases/responses/whois.adamsnames.tc/gd/registered.txt
256
149
  test/testcases/responses/whois.adamsnames.tc/tc/available.txt
@@ -391,12 +284,14 @@ test/testcases/responses/whois.nic.gov/available.txt
391
284
  test/testcases/responses/whois.nic.gov/registered.txt
392
285
  test/testcases/responses/whois.nic.ht/available.txt
393
286
  test/testcases/responses/whois.nic.ht/registered.txt
394
- test/testcases/responses/whois.nic.hu/available.txt
395
- test/testcases/responses/whois.nic.hu/in_progress.txt
396
- test/testcases/responses/whois.nic.hu/property_registrant_as_company.txt
397
- test/testcases/responses/whois.nic.hu/property_registrant_as_private_person.txt
398
- test/testcases/responses/whois.nic.hu/property_registrant_without_address.txt
399
- test/testcases/responses/whois.nic.hu/registered.txt
287
+ test/testcases/responses/whois.nic.hu/current/available.txt
288
+ test/testcases/responses/whois.nic.hu/current/registered.txt
289
+ test/testcases/responses/whois.nic.hu/v1.99/available.txt
290
+ test/testcases/responses/whois.nic.hu/v1.99/in_progress.txt
291
+ test/testcases/responses/whois.nic.hu/v1.99/property_registrant_as_company.txt
292
+ test/testcases/responses/whois.nic.hu/v1.99/property_registrant_as_private_person.txt
293
+ test/testcases/responses/whois.nic.hu/v1.99/property_registrant_without_address.txt
294
+ test/testcases/responses/whois.nic.hu/v1.99/registered.txt
400
295
  test/testcases/responses/whois.nic.im/available.txt
401
296
  test/testcases/responses/whois.nic.im/registered.txt
402
297
  test/testcases/responses/whois.nic.io/available.txt
@@ -434,6 +329,7 @@ test/testcases/responses/whois.nic.tel/registered.txt
434
329
  test/testcases/responses/whois.nic.tl/available.txt
435
330
  test/testcases/responses/whois.nic.tl/registered.txt
436
331
  test/testcases/responses/whois.nic.tr/available.txt
332
+ test/testcases/responses/whois.nic.tr/property_nameservers_with_trailing_space.txt
437
333
  test/testcases/responses/whois.nic.tr/registered.txt
438
334
  test/testcases/responses/whois.nic.travel/available.txt
439
335
  test/testcases/responses/whois.nic.travel/registered.txt
@@ -452,6 +348,7 @@ test/testcases/responses/whois.pandi.or.id/available.txt
452
348
  test/testcases/responses/whois.pandi.or.id/registered.txt
453
349
  test/testcases/responses/whois.publicinterestregistry.net/available.txt
454
350
  test/testcases/responses/whois.publicinterestregistry.net/registered.txt
351
+ test/testcases/responses/whois.publicinterestregistry.net/throttle.txt
455
352
  test/testcases/responses/whois.register.bg/available.txt
456
353
  test/testcases/responses/whois.register.bg/property_nameservers_with_ip.txt
457
354
  test/testcases/responses/whois.register.bg/registered.txt
@@ -487,5 +384,111 @@ test/testcases/responses/whois.za.net/available.txt
487
384
  test/testcases/responses/whois.za.net/registered.txt
488
385
  test/testcases/responses/whois.za.org/available.txt
489
386
  test/testcases/responses/whois.za.org/registered.txt
387
+ test/whois/answer/contact_test.rb
388
+ test/whois/answer/parser/base_test.rb
389
+ test/whois/answer/parser/blank_test.rb
390
+ test/whois/answer/parser/jobswhois.verisign-grs.com_test.rb
391
+ test/whois/answer/parser/whois.adamsnames.tc_test.rb
392
+ test/whois/answer/parser/whois.aeda.net.ae_test.rb
393
+ test/whois/answer/parser/whois.aero_test.rb
394
+ test/whois/answer/parser/whois.afilias-grs.info_test.rb
395
+ test/whois/answer/parser/whois.afilias.info_test.rb
396
+ test/whois/answer/parser/whois.ai_test.rb
397
+ test/whois/answer/parser/whois.arnes.si_test.rb
398
+ test/whois/answer/parser/whois.ausregistry.net.au_test.rb
399
+ test/whois/answer/parser/whois.biz_test.rb
400
+ test/whois/answer/parser/whois.cat_test.rb
401
+ test/whois/answer/parser/whois.cira.ca_test.rb
402
+ test/whois/answer/parser/whois.cnnic.cn_test.rb
403
+ test/whois/answer/parser/whois.cnnic.net.cn_test.rb
404
+ test/whois/answer/parser/whois.crsnic.net_test.rb
405
+ test/whois/answer/parser/whois.denic.de_test.rb
406
+ test/whois/answer/parser/whois.dk-hostmaster.dk_test.rb
407
+ test/whois/answer/parser/whois.dns.be_test.rb
408
+ test/whois/answer/parser/whois.dns.lu_test.rb
409
+ test/whois/answer/parser/whois.dns.pt_test.rb
410
+ test/whois/answer/parser/whois.domain-registry.nl_test.rb
411
+ test/whois/answer/parser/whois.domainregistry.ie_test.rb
412
+ test/whois/answer/parser/whois.domreg.lt_test.rb
413
+ test/whois/answer/parser/whois.dot.tk_test.rb
414
+ test/whois/answer/parser/whois.dotmobiregistry.net_test.rb
415
+ test/whois/answer/parser/whois.educause.edu_test.rb
416
+ test/whois/answer/parser/whois.eu.org_test.rb
417
+ test/whois/answer/parser/whois.eu_test.rb
418
+ test/whois/answer/parser/whois.hkdnr.net.hk_test.rb
419
+ test/whois/answer/parser/whois.iana.org_test.rb
420
+ test/whois/answer/parser/whois.in.ua_test.rb
421
+ test/whois/answer/parser/whois.isnic.is_test.rb
422
+ test/whois/answer/parser/whois.jprs.jp_test.rb
423
+ test/whois/answer/parser/whois.meregistry.net_test.rb
424
+ test/whois/answer/parser/whois.museum_test.rb
425
+ test/whois/answer/parser/whois.net.ua_test.rb
426
+ test/whois/answer/parser/whois.nic-se.se_test.rb
427
+ test/whois/answer/parser/whois.nic.ac_test.rb
428
+ test/whois/answer/parser/whois.nic.af_test.rb
429
+ test/whois/answer/parser/whois.nic.ag_test.rb
430
+ test/whois/answer/parser/whois.nic.am_test.rb
431
+ test/whois/answer/parser/whois.nic.as_test.rb
432
+ test/whois/answer/parser/whois.nic.asia_test.rb
433
+ test/whois/answer/parser/whois.nic.at_test.rb
434
+ test/whois/answer/parser/whois.nic.cc_test.rb
435
+ test/whois/answer/parser/whois.nic.cd_test.rb
436
+ test/whois/answer/parser/whois.nic.ch_test.rb
437
+ test/whois/answer/parser/whois.nic.coop_test.rb
438
+ test/whois/answer/parser/whois.nic.fr_test.rb
439
+ test/whois/answer/parser/whois.nic.gl_test.rb
440
+ test/whois/answer/parser/whois.nic.gov_test.rb
441
+ test/whois/answer/parser/whois.nic.ht_test.rb
442
+ test/whois/answer/parser/whois.nic.hu_test.rb
443
+ test/whois/answer/parser/whois.nic.im_test.rb
444
+ test/whois/answer/parser/whois.nic.io_test.rb
445
+ test/whois/answer/parser/whois.nic.it_test.rb
446
+ test/whois/answer/parser/whois.nic.lv_test.rb
447
+ test/whois/answer/parser/whois.nic.ly_test.rb
448
+ test/whois/answer/parser/whois.nic.mu_test.rb
449
+ test/whois/answer/parser/whois.nic.mx_test.rb
450
+ test/whois/answer/parser/whois.nic.name_test.rb
451
+ test/whois/answer/parser/whois.nic.nu_test.rb
452
+ test/whois/answer/parser/whois.nic.or.kr_test.rb
453
+ test/whois/answer/parser/whois.nic.sn_test.rb
454
+ test/whois/answer/parser/whois.nic.st_test.rb
455
+ test/whois/answer/parser/whois.nic.tel_test.rb
456
+ test/whois/answer/parser/whois.nic.tl_test.rb
457
+ test/whois/answer/parser/whois.nic.tr_test.rb
458
+ test/whois/answer/parser/whois.nic.travel_test.rb
459
+ test/whois/answer/parser/whois.nic.tv_test.rb
460
+ test/whois/answer/parser/whois.nic.uk_test.rb
461
+ test/whois/answer/parser/whois.nic.us_test.rb
462
+ test/whois/answer/parser/whois.nic.ve_test.rb
463
+ test/whois/answer/parser/whois.norid.no_test.rb
464
+ test/whois/answer/parser/whois.pandi.or.id_test.rb
465
+ test/whois/answer/parser/whois.publicinterestregistry.net_test.rb
466
+ test/whois/answer/parser/whois.register.bg_test.rb
467
+ test/whois/answer/parser/whois.registro.br_test.rb
468
+ test/whois/answer/parser/whois.registry.in_test.rb
469
+ test/whois/answer/parser/whois.registrypro.pro_test.rb
470
+ test/whois/answer/parser/whois.ripe.net_test.rb
471
+ test/whois/answer/parser/whois.ripn.net_test.rb
472
+ test/whois/answer/parser/whois.rotld.ro_test.rb
473
+ test/whois/answer/parser/whois.samoanic.ws_test.rb
474
+ test/whois/answer/parser/whois.srs.net.nz_test.rb
475
+ test/whois/answer/parser/whois.za.net_test.rb
476
+ test/whois/answer/parser/whois.za.org_test.rb
477
+ test/whois/answer/parser_test.rb
478
+ test/whois/answer/super_struct_test.rb
479
+ test/whois/answer_test.rb
480
+ test/whois/client_test.rb
481
+ test/whois/errors_test.rb
482
+ test/whois/integration_test.rb
483
+ test/whois/server/adapters/afilias_test.rb
484
+ test/whois/server/adapters/base_test.rb
485
+ test/whois/server/adapters/formatted_test.rb
486
+ test/whois/server/adapters/none_test.rb
487
+ test/whois/server/adapters/not_implemented_test.rb
488
+ test/whois/server/adapters/pir_test.rb
489
+ test/whois/server/adapters/standard_test.rb
490
+ test/whois/server/adapters/verisign_test.rb
491
+ test/whois/server/adapters/web_test.rb
492
+ test/whois/server_test.rb
490
493
  utils/bm_delegation_vs_inheritance.rb
491
494
  utils/bm_shell_vs_pure.rb
data/lib/whois/answer.rb CHANGED
@@ -134,8 +134,8 @@ module Whois
134
134
 
135
135
  # Delegates all method calls to the internal parser.
136
136
  def method_missing(method, *args, &block)
137
- if (Parser::PROPERTIES + Parser::METHODS).include?(method)
138
- self.class.class_eval foo = %{
137
+ if Parser::PROPERTIES.include?(method)
138
+ self.class.class_eval <<-RUBY, __FILE__, __LINE__ + 1
139
139
  def #{method}(*args, &block)
140
140
  if property_supported?(:#{method})
141
141
  parser.#{method}(*args, &block)
@@ -143,15 +143,25 @@ module Whois
143
143
  nil
144
144
  end
145
145
  end
146
- }, __FILE__, __LINE__
146
+ RUBY
147
+ send(method, *args, &block)
148
+
149
+ elsif Parser::METHODS.include?(method)
150
+ self.class.class_eval <<-RUBY, __FILE__, __LINE__ + 1
151
+ def #{method}(*args, &block)
152
+ if parser.respond_to?(:#{method})
153
+ parser.#{method}(*args, &block)
154
+ end
155
+ end
156
+ RUBY
147
157
  send(method, *args, &block)
148
158
 
149
159
  elsif method.to_s =~ /([a-z_]+)\?/ and (Parser::PROPERTIES + Parser::METHODS).include?($1.to_sym)
150
- self.class.class_eval %{
160
+ self.class.class_eval <<-RUBY, __FILE__, __LINE__ + 1
151
161
  def #{$1}?
152
162
  !#{$1}.nil?
153
163
  end
154
- }, __FILE__, __LINE__
164
+ RUBY
155
165
  send($1)
156
166
 
157
167
  else
@@ -23,7 +23,7 @@ module Whois
23
23
  class Parser
24
24
 
25
25
  METHODS = [
26
- :contacts,
26
+ :contacts, :throttle?,
27
27
  # deprecated methods
28
28
  :registrant, :admin, :technical,
29
29
  ]
@@ -16,6 +16,7 @@ whois.cat (.cat)
16
16
  == Property Proposals
17
17
 
18
18
  * changed_by
19
+ * version
19
20
 
20
21
 
21
22
  == Feature Proposals
@@ -221,7 +221,9 @@ module Whois
221
221
  end
222
222
 
223
223
 
224
- # Returns an array of all supported contacts.
224
+ # Gets all supported contacts merged into a single Array.
225
+ #
226
+ # Returns an Array of Whois::Aswer::Contact.
225
227
  def contacts
226
228
  contacts = []
227
229
  contacts.concat(registrant_contact.is_a?(Array) ? registrant_contact : [registrant_contact]) if property_supported?(:registrant_contact)
@@ -230,6 +232,16 @@ module Whois
230
232
  contacts.compact
231
233
  end
232
234
 
235
+ # Checks whether this is a throttle response.
236
+ # The default implementation always returns false.
237
+ #
238
+ # This method is intended to be overrridden by child classes.
239
+ #
240
+ # Returns false by default.
241
+ def throttle?
242
+ false
243
+ end
244
+
233
245
 
234
246
  # @deprecated {#registrant} is deprecated
235
247
  # and will be removed in a future version.
@@ -30,12 +30,12 @@ module Whois
30
30
  include Ast
31
31
 
32
32
  property_supported :disclaimer do
33
- node('Disclaimer')
33
+ node("disclaimer")
34
34
  end
35
35
 
36
36
 
37
37
  property_supported :domain do
38
- node('Domain')
38
+ @domain ||= node("domain")
39
39
  end
40
40
 
41
41
  property_supported :domain_id do
@@ -172,7 +172,6 @@ module Whois
172
172
  def parse
173
173
  @ast = {}
174
174
  while !@input.eos?
175
- trim_newline ||
176
175
  parse_content
177
176
  end
178
177
  @ast
@@ -180,37 +179,59 @@ module Whois
180
179
 
181
180
  private
182
181
 
183
- def trim_newline
184
- @input.scan(/\n/)
182
+ def trim_empty_line
183
+ @input.scan(/^\n/)
185
184
  end
186
185
 
187
186
  def parse_content
187
+ parse_version ||
188
188
  parse_disclaimer ||
189
189
  parse_domain ||
190
190
  parse_not_found ||
191
191
  parse_in_progress ||
192
+
193
+ # v2.0
194
+ parse_moreinfo ||
195
+
196
+ # v1.99
192
197
  parse_domain_data ||
193
198
  parse_contacts ||
194
- trim_newline ||
199
+
200
+ trim_empty_line ||
195
201
  error("Unexpected token")
196
202
  end
197
203
 
198
- def parse_disclaimer
204
+
205
+ def parse_version
199
206
  if @input.match?(/% Whois server .*\n/)
200
- @input.scan_until(/\n\n/)
201
- lines = []
202
- while @input.match?(/\S+/) && @input.scan(/(.*)\n/)
203
- lines << @input[1].strip
204
- end
205
- @ast['Disclaimer'] = lines.join("\n")
207
+ p("whois.nic.hu: parse_version") if 1 == 2 || $DEBUG
208
+ @input.scan(/% Whois server ([\w\d\.]*).*?\n/)
209
+ @ast["version"] = @input[1]
210
+ end
211
+ end
212
+
213
+ # FIXME: Requires UTF-8 Encoding (see #11)
214
+ def parse_moreinfo
215
+ if @input.match?(/Tov.* ld\.:\n/)
216
+ p("whois.nic.hu: parse_moreinfo") if 1 == 2 || $DEBUG
217
+ @ast["moreinfo"] = @input.scan_until(/^\n/)
218
+ end
219
+ end
220
+
221
+ def parse_disclaimer
222
+ if @input.match?(/^Rights.*\n/)
223
+ p("whois.nic.hu: parse_disclaimer") if 1 == 2 || $DEBUG
224
+ lines = @input.scan_until(/^\n/)
225
+ @ast["disclaimer"] = lines.strip
206
226
  true
207
227
  end
208
228
  false
209
229
  end
210
230
 
211
231
  def parse_domain
212
- if @input.match?(/\ndomain:\s+\S+\n/) && @input.scan(/\ndomain:\s+(\S+)\n/)
213
- @ast['Domain'] = @input[1].strip
232
+ if @input.match?(/^domain:\s+(.*)\n/) && @input.scan(/^domain:\s+(.*?)\n/)
233
+ p("whois.nic.hu: parse_domain") if 1 == 2 || $DEBUG
234
+ @ast["domain"] = @input[1].strip
214
235
  true
215
236
  end
216
237
  false
@@ -218,8 +239,9 @@ module Whois
218
239
 
219
240
  # FIXME: Requires UTF-8 Encoding (see #11)
220
241
  def parse_not_found
221
- if @input.match?(/\nNincs (.*?) \/ No match\n/)
222
- @input.scan(/\nNincs (.*?) \/ No match\n/)
242
+ if @input.match?(/Nincs (.*?) \/ No match\n/)
243
+ p("whois.nic.hu: parse_not_found") if 1 == 2 || $DEBUG
244
+ @input.scan(/Nincs (.*?) \/ No match\n/)
223
245
  return @ast['NotFound'] = true
224
246
  end
225
247
  @ast['NotFound'] = false
@@ -228,15 +250,17 @@ module Whois
228
250
  # FIXME: Requires UTF-8 Encoding (see #11)
229
251
  def parse_in_progress
230
252
  if @input.match?(/(.*?) folyamatban \/ Registration in progress\n/)
231
- @input.scan(/(.*?) folyamatban \/ Registration in progress\n/)
232
- return @ast['InProgress'] = true
253
+ p("whois.nic.hu: parse_in_progress") if 1 == 2 || $DEBUG
254
+ @input.scan(/(.*?) folyamatban \/ Registration in progress\n/)
255
+ return @ast['InProgress'] = true
233
256
  end
234
257
  @ast['InProgress'] = false
235
258
  end
236
259
 
237
260
  def parse_domain_data
238
- if @input.match?(/\S+:\s+.*\n/)
239
- while @input.match?(/\S+:\s+.*\n/) && @input.scan(/(\S+):\s+(.*)\n/)
261
+ if @input.match?(/(.+?):\s+(.*)\n/)
262
+ p("whois.nic.hu: parse_domain_data") if 1 == 2 || $DEBUG
263
+ while @input.scan(/(.+?):\s+(.*)\n/)
240
264
  key, value = @input[1].strip, @input[2].strip
241
265
  if key == 'person'
242
266
  @ast['name'] = value
@@ -262,9 +286,10 @@ module Whois
262
286
  end
263
287
 
264
288
  def parse_contacts
265
- if @input.match?(/\n\S+:\s+.*\n/)
266
- while @input.match?(/\n\S+:\s+.*\n/)
267
- @input.scan(/\n/)
289
+ if @input.match?(/\n(person|org):/)
290
+ p("whois.nic.hu: parse_contacts") if 1 == 2 || $DEBUG
291
+ @input.scan(/\n/)
292
+ while @input.match?(/(.+?):\s+(.*)\n/)
268
293
  parse_contact
269
294
  end
270
295
  true
@@ -274,71 +299,69 @@ module Whois
274
299
  end
275
300
 
276
301
  def parse_contact
277
- if @input.match?(/\S+:\s+.*\n/)
278
- contact ||= {}
279
- while @input.match?(/\S+:\s+.*\n/) && @input.scan(/(\S+):\s+(.*)\n/)
280
- key, value = @input[1].strip, @input[2].strip
281
- if key == 'hun-id'
282
- a1 = contact['address'][1].split(/\s/)
283
- zip = a1.shift
284
- city = a1.join(' ')
285
- # we should keep the old values if this is an already
286
- # defined contact
287
- if @ast[value].nil?
288
- @ast[value] = {
289
- "id" => value,
290
- "name" => contact['name'],
291
- "organization" => contact['org'],
292
- "address" => contact['address'][0],
293
- "city" => city,
294
- "zip" => zip,
295
- "country_code" => contact['address'][2],
296
- "phone" => contact['phone'],
297
- "fax" => contact['fax-no'],
298
- "email" => contact['e-mail']
299
- }
300
- else
301
- @ast[value]["id"] ||= value
302
- @ast[value]["name"] ||= contact['name']
303
- @ast[value]["organization"] ||= contact['org']
304
- @ast[value]["address"] ||= contact['address'][0]
305
- @ast[value]["city"] ||= city
306
- @ast[value]["zip"] ||= zip
307
- @ast[value]["country_code"] ||= contact['address'][2]
308
- @ast[value]["phone"] ||= contact['phone']
309
- @ast[value]["fax"] ||= contact['fax-no']
310
- @ast[value]["email"] ||= contact['e-mail']
311
- end
312
- contact = {}
313
- elsif key == 'person'
314
- contact['name'] = value
315
- elsif key == 'org'
316
- if value =~ /org_name_hun:\s+(.*)\Z/
317
- contact['name'] = $1
318
- elsif value =~ /org_name_eng:\s+(.*)\Z/
319
- contact['org'] = $1
320
- else
321
- contact['org'] = value
322
- end
323
- elsif key == 'address' && !contact['address'].nil?
324
- contact['address'] = [contact['address'], value].flatten
302
+ contact ||= {}
303
+ p("whois.nic.hu: parse_contact") if 1 == 2 || $DEBUG
304
+ while @input.scan(/(.+?):\s+(.*)\n/)
305
+ key, value = @input[1].strip, @input[2].strip
306
+ if key == 'hun-id'
307
+ a1 = contact['address'][1].split(/\s/)
308
+ zip = a1.shift
309
+ city = a1.join(' ')
310
+ # we should keep the old values if this is an already
311
+ # defined contact
312
+ if @ast[value].nil?
313
+ @ast[value] = {
314
+ "id" => value,
315
+ "name" => contact['name'],
316
+ "organization" => contact['org'],
317
+ "address" => contact['address'][0],
318
+ "city" => city,
319
+ "zip" => zip,
320
+ "country_code" => contact['address'][2],
321
+ "phone" => contact['phone'],
322
+ "fax" => contact['fax-no'],
323
+ "email" => contact['e-mail']
324
+ }
325
+ else
326
+ @ast[value]["id"] ||= value
327
+ @ast[value]["name"] ||= contact['name']
328
+ @ast[value]["organization"] ||= contact['org']
329
+ @ast[value]["address"] ||= contact['address'][0]
330
+ @ast[value]["city"] ||= city
331
+ @ast[value]["zip"] ||= zip
332
+ @ast[value]["country_code"] ||= contact['address'][2]
333
+ @ast[value]["phone"] ||= contact['phone']
334
+ @ast[value]["fax"] ||= contact['fax-no']
335
+ @ast[value]["email"] ||= contact['e-mail']
336
+ end
337
+ contact = {}
338
+ elsif key == 'person'
339
+ contact['name'] = value
340
+ elsif key == 'org'
341
+ if value =~ /org_name_hun:\s+(.*)\Z/
342
+ contact['name'] = $1
343
+ elsif value =~ /org_name_eng:\s+(.*)\Z/
344
+ contact['org'] = $1
325
345
  else
326
- contact[key] = value
346
+ contact['org'] = value
327
347
  end
348
+ elsif key == 'address' && !contact['address'].nil?
349
+ contact['address'] = [contact['address'], value].flatten
350
+ else
351
+ contact[key] = value
328
352
  end
329
- true
330
353
  end
331
- false
354
+ true
332
355
  end
333
356
 
334
357
  def error(message)
335
- raise "#{message}: #{@input.peek(@input.string.length)}"
358
+ raise "#{message}: `#{@input.peek(@input.string.length)}'"
336
359
  end
337
360
 
338
361
  end
339
-
362
+
340
363
  end
341
364
 
342
365
  end
343
366
  end
344
- end
367
+ end