whois 1.1.8 → 1.2.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 (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