whois 1.0.12 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/CHANGELOG.rdoc +16 -1
  2. data/Manifest +24 -4
  3. data/lib/whois.rb +5 -5
  4. data/lib/whois/answer.rb +6 -2
  5. data/lib/whois/answer/contact.rb +18 -17
  6. data/lib/whois/answer/parser.rb +16 -1
  7. data/lib/whois/answer/parser/base.rb +40 -4
  8. data/lib/whois/answer/parser/whois.ausregistry.net.au.rb +71 -0
  9. data/lib/whois/answer/parser/whois.denic.de.rb +6 -6
  10. data/lib/whois/answer/parser/whois.nic.ac.rb +3 -3
  11. data/lib/whois/answer/parser/whois.nic.am.rb +83 -0
  12. data/lib/whois/answer/parser/whois.nic.as.rb +73 -0
  13. data/lib/whois/answer/parser/whois.nic.hu.rb +7 -7
  14. data/lib/whois/answer/parser/whois.nic.it.rb +6 -6
  15. data/lib/whois/answer/parser/whois.nic.st.rb +81 -0
  16. data/lib/whois/answer/parser/whois.publicinterestregistry.net.rb +3 -3
  17. data/lib/whois/version.rb +2 -2
  18. data/test/answer/contact_test.rb +14 -0
  19. data/test/answer/parser/base_test.rb +18 -0
  20. data/test/answer/parser/whois.ausregistry.net.au_test.rb +70 -0
  21. data/test/answer/parser/whois.denic.de_test.rb +65 -44
  22. data/test/answer/parser/whois.eu_test.rb +1 -1
  23. data/test/answer/parser/whois.nic-se.se_test.rb +1 -1
  24. data/test/answer/parser/whois.nic.ac_test.rb +13 -13
  25. data/test/answer/parser/whois.nic.am_test.rb +84 -0
  26. data/test/answer/parser/whois.nic.as_test.rb +63 -0
  27. data/test/answer/parser/whois.nic.hu_test.rb +45 -35
  28. data/test/answer/parser/whois.nic.it_test.rb +92 -65
  29. data/test/answer/parser/whois.nic.st_test.rb +77 -0
  30. data/test/answer/parser/whois.publicinterestregistry.net_test.rb +26 -20
  31. data/test/answer/parser_test.rb +45 -0
  32. data/test/answer_test.rb +7 -0
  33. data/test/list_tld +4 -4
  34. data/test/testcases/responses/whois.ausregistry.net.au/available.txt +1 -0
  35. data/test/testcases/responses/whois.ausregistry.net.au/registered.txt +23 -0
  36. data/test/testcases/responses/whois.denic.de/{nameservers_with_ip.txt → property_nameservers_with_ip.txt} +0 -0
  37. data/test/testcases/responses/whois.denic.de/property_technical_contact.txt +70 -0
  38. data/test/testcases/responses/whois.eu/{nameservers_with_ip.txt → property_nameservers_with_ip.txt} +0 -0
  39. data/test/testcases/responses/whois.nic-se.se/{nameservers_with_ip.txt → property_nameservers_with_ip.txt} +0 -0
  40. data/test/testcases/responses/whois.nic.am/available.txt +3 -0
  41. data/test/testcases/responses/whois.nic.am/registered.txt +42 -0
  42. data/test/testcases/responses/whois.nic.as/available.txt +12 -0
  43. data/test/testcases/responses/whois.nic.as/registered.txt +18 -0
  44. data/test/testcases/responses/whois.nic.it/property_admin_contact.txt +53 -0
  45. data/test/testcases/responses/whois.nic.it/{contact.txt → property_registrant_contact.txt} +0 -0
  46. data/test/testcases/responses/whois.nic.it/property_technical_contact.txt +53 -0
  47. data/test/testcases/responses/whois.nic.st/available.txt +1 -0
  48. data/test/testcases/responses/whois.nic.st/registered.txt +47 -0
  49. data/whois.gemspec +5 -5
  50. metadata +36 -7
@@ -90,79 +90,106 @@ class AnswerParserWhoisNicItTest < Whois::Answer::Parser::TestCase
90
90
  end
91
91
 
92
92
 
93
- def test_contact
94
- contact = @klass.new(load_part('/contact.txt')).registrant
95
- assert_instance_of Whois::Answer::Contact, contact
96
- assert_equal "HTML1-ITNIC", contact.id
97
- assert_equal "HTML.it srl", contact.name
98
- assert_equal "HTML.it srl", contact.organization
99
- assert_equal "Viale Alessandrino, 595", contact.address
100
- assert_equal "Roma", contact.city
101
- assert_equal "00172", contact.zip
102
- assert_equal nil, contact.country
103
- assert_equal "IT", contact.country_code
104
- assert_equal Time.parse("2007-03-01 10:28:08"), contact.created_on
105
- assert_equal Time.parse("2007-03-01 10:28:08"), contact.updated_on
106
- end
107
-
108
- def test_registrant
109
- contact = @klass.new(load_part('/registered.txt')).registrant
110
- assert_instance_of Whois::Answer::Contact, contact
111
- assert_equal "GOOG175-ITNIC", contact.id
112
- assert_equal "Google Ireland Holdings", contact.name
113
- assert_equal nil, contact.organization
114
- assert_equal "30 Herbert Street", contact.address
115
- assert_equal "Dublin", contact.city
116
- assert_equal "2", contact.zip
117
- assert_equal nil, contact.country
118
- assert_equal "IE", contact.country_code
119
- assert_equal Time.parse("2008-11-27 16:47:22"), contact.created_on
120
- assert_equal Time.parse("2008-11-27 16:47:22"), contact.updated_on
121
- end
122
-
123
- def test_registrant_with_available
124
- assert_equal nil,
125
- @klass.new(load_part('/available.txt')).registrant
93
+ def test_registrant_contact_with_registered
94
+ parser = @klass.new(load_part('/registered.txt'))
95
+ expected = parser.registrant_contact
96
+ assert_equal expected, parser.registrant_contact
97
+ assert_equal expected, parser.instance_eval { @registrant_contact }
98
+
99
+ assert_instance_of Whois::Answer::Contact, expected
100
+ assert_equal "GOOG175-ITNIC", expected.id
126
101
  end
127
102
 
128
- def test_admin
129
- contact = @klass.new(load_part('/registered.txt')).admin
130
- assert_instance_of Whois::Answer::Contact, contact
131
- assert_equal "TT4277-ITNIC", contact.id
132
- assert_equal "Tsao Tu", contact.name
133
- assert_equal "Tu Tsao", contact.organization
134
- assert_equal "30 Herbert Street", contact.address
135
- assert_equal "Dublin", contact.city
136
- assert_equal "2", contact.zip
137
- assert_equal nil, contact.country
138
- assert_equal "IE", contact.country_code
139
- assert_equal Time.parse("2008-11-27 16:47:22"), contact.created_on
140
- assert_equal Time.parse("2008-11-27 16:47:22"), contact.updated_on
103
+ def test_registrant_contact_with_available
104
+ parser = @klass.new(load_part('/available.txt'))
105
+ expected = nil
106
+ assert_equal expected, parser.registrant_contact
107
+ assert_equal expected, parser.instance_eval { @registrant_contact }
141
108
  end
142
109
 
143
- def test_admin_with_available
144
- assert_equal nil,
145
- @klass.new(load_part('/available.txt')).admin
110
+ def test_registrant_contact
111
+ parser = @klass.new(load_part('/property_registrant_contact.txt'))
112
+ result = parser.registrant_contact
113
+
114
+ assert_instance_of Whois::Answer::Contact, result
115
+ assert_equal "HTML1-ITNIC", result.id
116
+ assert_equal "HTML.it srl", result.name
117
+ assert_equal "HTML.it srl", result.organization
118
+ assert_equal "Viale Alessandrino, 595", result.address
119
+ assert_equal "Roma", result.city
120
+ assert_equal "00172", result.zip
121
+ assert_equal nil, result.country
122
+ assert_equal "IT", result.country_code
123
+ assert_equal Time.parse("2007-03-01 10:28:08"), result.created_on
124
+ assert_equal Time.parse("2007-03-01 10:28:08"), result.updated_on
146
125
  end
147
126
 
148
- def test_technical
149
- contact = @klass.new(load_part('/registered.txt')).technical
150
- assert_instance_of Whois::Answer::Contact, contact
151
- assert_equal "TS7016-ITNIC", contact.id
152
- assert_equal "Technical Services", contact.name
153
- assert_equal nil, contact.organization
154
- assert_equal nil, contact.address
155
- assert_equal nil, contact.city
156
- assert_equal nil, contact.zip
157
- assert_equal nil, contact.country
158
- assert_equal nil, contact.country_code
159
- assert_equal nil, contact.created_on
160
- assert_equal nil, contact.updated_on
127
+ def test_admin_contact_with_registered
128
+ parser = @klass.new(load_part('/registered.txt'))
129
+ expected = parser.admin_contact
130
+ assert_equal expected, parser.admin_contact
131
+ assert_equal expected, parser.instance_eval { @admin_contact }
132
+
133
+ assert_instance_of Whois::Answer::Contact, expected
134
+ assert_equal "TT4277-ITNIC", expected.id
161
135
  end
162
136
 
163
- def test_technical_with_available
164
- assert_equal nil,
165
- @klass.new(load_part('/available.txt')).technical
137
+ def test_admin_contact_with_available
138
+ parser = @klass.new(load_part('/available.txt'))
139
+ expected = nil
140
+ assert_equal expected, parser.admin_contact
141
+ assert_equal expected, parser.instance_eval { @admin_contact }
142
+ end
143
+
144
+ def test_admin_contact
145
+ parser = @klass.new(load_part('/property_admin_contact.txt'))
146
+ result = parser.admin_contact
147
+
148
+ assert_instance_of Whois::Answer::Contact, result
149
+ assert_equal "TT4277-ITNIC", result.id
150
+ assert_equal "Tsao Tu", result.name
151
+ assert_equal "Tu Tsao", result.organization
152
+ assert_equal "30 Herbert Street", result.address
153
+ assert_equal "Dublin", result.city
154
+ assert_equal "2", result.zip
155
+ assert_equal nil, result.country
156
+ assert_equal "IE", result.country_code
157
+ assert_equal Time.parse("2008-11-27 16:47:22"), result.created_on
158
+ assert_equal Time.parse("2008-11-27 16:47:22"), result.updated_on
159
+ end
160
+
161
+ def test_technical_contact_with_registered
162
+ parser = @klass.new(load_part('/registered.txt'))
163
+ expected = parser.technical_contact
164
+ assert_equal expected, parser.technical_contact
165
+ assert_equal expected, parser.instance_eval { @technical_contact }
166
+
167
+ assert_instance_of Whois::Answer::Contact, expected
168
+ assert_equal "TS7016-ITNIC", expected.id
169
+ end
170
+
171
+ def test_technical_contact_with_available
172
+ parser = @klass.new(load_part('/available.txt'))
173
+ expected = nil
174
+ assert_equal expected, parser.technical_contact
175
+ assert_equal expected, parser.instance_eval { @technical_contact }
176
+ end
177
+
178
+ def test_technical_contact
179
+ parser = @klass.new(load_part('/property_technical_contact.txt'))
180
+ result = parser.technical_contact
181
+
182
+ assert_instance_of Whois::Answer::Contact, result
183
+ assert_equal "TS7016-ITNIC", result.id
184
+ assert_equal "Technical Services", result.name
185
+ assert_equal nil, result.organization
186
+ assert_equal nil, result.address
187
+ assert_equal nil, result.city
188
+ assert_equal nil, result.zip
189
+ assert_equal nil, result.country
190
+ assert_equal nil, result.country_code
191
+ assert_equal nil, result.created_on
192
+ assert_equal nil, result.updated_on
166
193
  end
167
194
 
168
195
 
@@ -0,0 +1,77 @@
1
+ require 'test_helper'
2
+ require 'whois/answer/parser/whois.nic.st'
3
+
4
+ class AnswerParserWhoisNicStTest < Whois::Answer::Parser::TestCase
5
+
6
+ def setup
7
+ @klass = Whois::Answer::Parser::WhoisNicSt
8
+ @host = "whois.nic.st"
9
+ end
10
+
11
+
12
+ def test_status
13
+ parser = @klass.new(load_part('/registered.txt'))
14
+ expected = :registered
15
+ assert_equal expected, parser.status
16
+ assert_equal expected, parser.instance_eval { @status }
17
+
18
+ parser = @klass.new(load_part('/available.txt'))
19
+ expected = :available
20
+ assert_equal expected, parser.status
21
+ assert_equal expected, parser.instance_eval { @status }
22
+ end
23
+
24
+ def test_available?
25
+ assert !@klass.new(load_part('/registered.txt')).available?
26
+ assert @klass.new(load_part('/available.txt')).available?
27
+ end
28
+
29
+ def test_registered?
30
+ assert @klass.new(load_part('/registered.txt')).registered?
31
+ assert !@klass.new(load_part('/available.txt')).registered?
32
+ end
33
+
34
+
35
+ def test_created_on
36
+ parser = @klass.new(load_part('/registered.txt'))
37
+ expected = Time.parse("2004-06-15")
38
+ assert_equal expected, parser.created_on
39
+ assert_equal expected, parser.instance_eval { @created_on }
40
+
41
+ parser = @klass.new(load_part('/available.txt'))
42
+ expected = nil
43
+ assert_equal expected, parser.created_on
44
+ assert_equal expected, parser.instance_eval { @created_on }
45
+ end
46
+
47
+ def test_updated_on
48
+ parser = @klass.new(load_part('/registered.txt'))
49
+ expected = Time.parse("2009-05-18")
50
+ assert_equal expected, parser.updated_on
51
+ assert_equal expected, parser.instance_eval { @updated_on }
52
+
53
+ parser = @klass.new(load_part('/available.txt'))
54
+ expected = nil
55
+ assert_equal expected, parser.updated_on
56
+ assert_equal expected, parser.instance_eval { @updated_on }
57
+ end
58
+
59
+ def test_expires_on
60
+ assert_raise(Whois::PropertyNotSupported) { @klass.new(load_part('/registered.txt')).expires_on }
61
+ assert_raise(Whois::PropertyNotSupported) { @klass.new(load_part('/available.txt')).expires_on }
62
+ end
63
+
64
+
65
+ def test_nameservers
66
+ parser = @klass.new(load_part('/registered.txt'))
67
+ expected = %w( ns1.google.com ns2.google.com ns3.google.com ns4.google.com )
68
+ assert_equal expected, parser.nameservers
69
+ assert_equal expected, parser.instance_eval { @nameservers }
70
+
71
+ parser = @klass.new(load_part('/available.txt'))
72
+ expected = %w()
73
+ assert_equal expected, parser.nameservers
74
+ assert_equal expected, parser.instance_eval { @nameservers }
75
+ end
76
+
77
+ end
@@ -92,7 +92,7 @@ time. By submitting this query, you agree to abide by this policy.
92
92
  end
93
93
 
94
94
 
95
- def test_registrar
95
+ def test_registrar_with_registered
96
96
  registrar = @klass.new(load_part('/registered.txt')).registrar
97
97
  assert_instance_of Whois::Answer::Registrar, registrar
98
98
  assert_equal "R37-LROR", registrar.id
@@ -101,13 +101,15 @@ time. By submitting this query, you agree to abide by this policy.
101
101
  end
102
102
 
103
103
  def test_registrar_with_available
104
- assert_equal nil,
105
- @klass.new(load_part('/available.txt')).registrar
104
+ parser = @klass.new(load_part('/available.txt'))
105
+ expected = nil
106
+ assert_equal expected, parser.registrar
107
+ assert_equal expected, parser.instance_eval { @registrar }
106
108
  end
107
109
 
108
110
 
109
- def test_registrant
110
- contact = @klass.new(load_part('/registered.txt')).registrant
111
+ def test_registrant_contact_with_available
112
+ contact = @klass.new(load_part('/registered.txt')).registrant_contact
111
113
  assert_instance_of Whois::Answer::Contact, contact
112
114
  assert_equal "mmr-32097", contact.id
113
115
  assert_equal "DNS Admin", contact.name
@@ -123,14 +125,15 @@ time. By submitting this query, you agree to abide by this policy.
123
125
  assert_equal "dns-admin@google.com", contact.email
124
126
  end
125
127
 
126
- def test_registrant_with_available
127
- assert_equal nil,
128
- @klass.new(load_part('/available.txt')).registrant
128
+ def test_registrant_contact_with_available
129
+ parser = @klass.new(load_part('/available.txt'))
130
+ expected = nil
131
+ assert_equal expected, parser.registrant_contact
132
+ assert_equal expected, parser.instance_eval { @registrant_contact }
129
133
  end
130
134
 
131
-
132
- def test_admin
133
- contact = @klass.new(load_part('/registered.txt')).admin
135
+ def test_admin_contact_with_registered
136
+ contact = @klass.new(load_part('/registered.txt')).admin_contact
134
137
  assert_instance_of Whois::Answer::Contact, contact
135
138
  assert_equal "mmr-32097", contact.id
136
139
  assert_equal "DNS Admin", contact.name
@@ -146,14 +149,15 @@ time. By submitting this query, you agree to abide by this policy.
146
149
  assert_equal "dns-admin@google.com", contact.email
147
150
  end
148
151
 
149
- def test_admin_with_available
150
- assert_equal nil,
151
- @klass.new(load_part('/available.txt')).admin
152
+ def test_admin_contact_with_available
153
+ parser = @klass.new(load_part('/available.txt'))
154
+ expected = nil
155
+ assert_equal expected, parser.admin_contact
156
+ assert_equal expected, parser.instance_eval { @admin_contact }
152
157
  end
153
158
 
154
-
155
- def test_technical
156
- contact = @klass.new(load_part('/registered.txt')).technical
159
+ def test_technical_contact_with_registered
160
+ contact = @klass.new(load_part('/registered.txt')).technical_contact
157
161
  assert_instance_of Whois::Answer::Contact, contact
158
162
  assert_equal "mmr-32097", contact.id
159
163
  assert_equal "DNS Admin", contact.name
@@ -169,9 +173,11 @@ time. By submitting this query, you agree to abide by this policy.
169
173
  assert_equal "dns-admin@google.com", contact.email
170
174
  end
171
175
 
172
- def test_technical_with_available
173
- assert_equal nil,
174
- @klass.new(load_part('/available.txt')).technical
176
+ def test_technical_contact_with_available
177
+ parser = @klass.new(load_part('/available.txt'))
178
+ expected = nil
179
+ assert_equal expected, parser.technical_contact
180
+ assert_equal expected, parser.instance_eval { @technical_contact }
175
181
  end
176
182
 
177
183
 
@@ -2,6 +2,20 @@ require 'test_helper'
2
2
 
3
3
  class AnswerParserTest < Test::Unit::TestCase
4
4
 
5
+ class Whois::Answer::Parser::WhoisAnswerParser1Fake < Whois::Answer::Parser::Base
6
+ end
7
+
8
+ class Whois::Answer::Parser::WhoisAnswerParser2Fake < Whois::Answer::Parser::Base
9
+ property_supported(:technical_contact) { "p2-t1" }
10
+ property_supported(:admin_contact) { "p2-a1" }
11
+ property_supported(:registrant_contact) { nil }
12
+ end
13
+
14
+ class Whois::Answer::Parser::WhoisAnswerParser3Fake < Whois::Answer::Parser::Base
15
+ property_supported(:technical_contact) { "p3-t1" }
16
+ end
17
+
18
+
5
19
  def setup
6
20
  @klass = Whois::Answer::Parser
7
21
  @answer = Whois::Answer.new(nil, [])
@@ -75,6 +89,35 @@ class AnswerParserTest < Test::Unit::TestCase
75
89
  end
76
90
 
77
91
 
92
+ def test_contacts_with_zero_parts
93
+ answer = Whois::Answer.new(nil, [])
94
+ parser = @klass.new(answer)
95
+ assert_equal 0, parser.contacts.length
96
+ assert_equal [], parser.contacts
97
+ end
98
+
99
+ def test_contacts_with_one_part
100
+ answer = Whois::Answer.new(nil, [Whois::Answer::Part.new(nil, "whois.answer-parser2.fake")])
101
+ parser = @klass.new(answer)
102
+ assert_equal 2, parser.contacts.length
103
+ assert_equal ["p2-a1", "p2-t1"], parser.contacts
104
+ end
105
+
106
+ def test_contacts_with_one_part_unsupported
107
+ answer = Whois::Answer.new(nil, [Whois::Answer::Part.new(nil, "whois.answer-parser1.fake")])
108
+ parser = @klass.new(answer)
109
+ assert_equal 0, parser.contacts.length
110
+ assert_equal [], parser.contacts
111
+ end
112
+
113
+ def test_contacts_with_two_parts
114
+ answer = Whois::Answer.new(nil, [Whois::Answer::Part.new(nil, "whois.answer-parser2.fake"), Whois::Answer::Part.new(nil, "whois.answer-parser3.fake")])
115
+ parser = @klass.new(answer)
116
+ assert_equal 3, parser.contacts.length
117
+ assert_equal ["p3-t1", "p2-a1", "p2-t1"], parser.contacts
118
+ end
119
+
120
+
78
121
  class Whois::Answer::Parser::TestParserSupported < Whois::Answer::Parser::Base
79
122
  property_supported :status do
80
123
  :status_supported
@@ -89,6 +132,7 @@ class AnswerParserTest < Test::Unit::TestCase
89
132
  :expires_on_supported
90
133
  end
91
134
  end
135
+
92
136
  class Whois::Answer::Parser::TestParserUndefined < Whois::Answer::Parser::Base
93
137
  property_supported :status do
94
138
  :status_undefined
@@ -97,6 +141,7 @@ class AnswerParserTest < Test::Unit::TestCase
97
141
  # not defined :updated_on
98
142
  # not defined :expires_on
99
143
  end
144
+
100
145
  class Whois::Answer::Parser::TestParserUnsupported < Whois::Answer::Parser::Base
101
146
  property_not_supported :status
102
147
  property_not_supported :created_on
data/test/answer_test.rb CHANGED
@@ -77,6 +77,13 @@ class AnswerTest < Test::Unit::TestCase
77
77
  end
78
78
 
79
79
 
80
+ def test_contacts
81
+ answer = @klass.new(@server, @parts)
82
+ answer.parser.expects(:contacts).returns([])
83
+ assert_equal [], answer.contacts
84
+ end
85
+
86
+
80
87
  def test_parser
81
88
  answer = @klass.new(nil, [Whois::Answer::Part.new("", "whois.nic.it")])
82
89
  assert_instance_of Whois::Answer::Parser, answer.parser
data/test/list_tld CHANGED
@@ -52,14 +52,14 @@ af;whois.nic.af;google.af;u34jedzcq.af
52
52
  af;whois.nic.ag;google.ag;u34jedzcq.ag
53
53
  ai;whois.ai;google.ai;u34jedzcq.ai
54
54
  al;;;
55
- #Whois::Server.define :tld, ".am", "whois.nic.am"
55
+ am;whois.nic.am;google.am;u34jedzcq.am
56
56
  an;;;
57
57
  ao;;;
58
58
  aq;;;
59
59
  ar;;;
60
- #Whois::Server.define :tld, ".as", "whois.nic.as"
60
+ as;whois.nic.as;google.as;u34jedzcq.as
61
61
  at;whois.nic.at;google.at;u34jedzcq.at
62
- #Whois::Server.define :tld, ".au", "whois.ausregistry.net.au"
62
+ au;whois.ausregistry.net.au;google.com.au;u34jedzcq.com.au
63
63
  aw;;;
64
64
  ax;;;
65
65
  az;;;
@@ -255,7 +255,7 @@ sm;whois.ripe.net;google.sm;u34jedzcq.sm
255
255
  #Whois::Server.define :tld, ".sn", "whois.nic.sn"
256
256
  so;;;
257
257
  sr;;;
258
- #Whois::Server.define :tld, ".st", "whois.nic.st"
258
+ st;whois.nic.st;google.st;u34jedzcq.st
259
259
  su;whois.ripn.net;google.su;u34jedzcq.su
260
260
  sv;;;
261
261
  sy;;;