whois 0.8.1 → 0.9.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 (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