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
@@ -66,11 +66,11 @@ module Whois
66
66
 
67
67
  property_not_supported :registrar
68
68
 
69
- property_not_supported :registrant
69
+ property_not_supported :registrant_contact
70
70
 
71
- property_not_supported :admin
71
+ property_not_supported :admin_contact
72
72
 
73
- property_not_supported :technical
73
+ property_not_supported :technical_contact
74
74
 
75
75
 
76
76
  property_not_supported :nameservers
@@ -0,0 +1,83 @@
1
+ #
2
+ # = Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ #
7
+ # Category:: Net
8
+ # Package:: Whois
9
+ # Author:: Simone Carletti <weppos@weppos.net>
10
+ # License:: MIT License
11
+ #
12
+ #--
13
+ #
14
+ #++
15
+
16
+
17
+ require 'whois/answer/parser/base'
18
+
19
+
20
+ module Whois
21
+ class Answer
22
+ class Parser
23
+
24
+ #
25
+ # = whois.nic.am parser
26
+ #
27
+ # Parser for the whois.nic.am server.
28
+ #
29
+ # NOTE: This parser is just a stub and provides only a few basic methods
30
+ # to check for domain availability and get domain status.
31
+ # Please consider to contribute implementing missing methods.
32
+ # See WhoisNicIt parser for an explanation of all available methods
33
+ # and examples.
34
+ #
35
+ class WhoisNicAm < Base
36
+
37
+ property_supported :status do
38
+ @status ||= if content_for_scanner =~ /\s+Status:\s+(.*)\n/
39
+ $1
40
+ end
41
+ end
42
+
43
+ property_supported :available? do
44
+ @available ||= !!(content_for_scanner =~ /No match/)
45
+ end
46
+
47
+ property_supported :registered? do
48
+ !available?
49
+ end
50
+
51
+
52
+ property_supported :created_on do
53
+ @created_on ||= if content_for_scanner =~ /\s+Registered:\s+(.*)\n/
54
+ Time.parse($1)
55
+ end
56
+ end
57
+
58
+ property_supported :updated_on do
59
+ @updated_on ||= if content_for_scanner =~ /\s+Last modified:\s+(.*)\n/
60
+ Time.parse($1)
61
+ end
62
+ end
63
+
64
+ property_supported :expires_on do
65
+ @expires_on ||= if content_for_scanner =~ /\s+Expires:\s+(.*)\n/
66
+ Time.parse($1)
67
+ end
68
+ end
69
+
70
+
71
+ property_supported :nameservers do
72
+ @nameservers ||= if content_for_scanner =~ /DNS servers:\n((.+\n)+)\n/
73
+ $1.split("\n").map { |value| value.strip }
74
+ else
75
+ []
76
+ end
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,73 @@
1
+ #
2
+ # = Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ #
7
+ # Category:: Net
8
+ # Package:: Whois
9
+ # Author:: Simone Carletti <weppos@weppos.net>
10
+ # License:: MIT License
11
+ #
12
+ #--
13
+ #
14
+ #++
15
+
16
+
17
+ require 'whois/answer/parser/base'
18
+
19
+
20
+ module Whois
21
+ class Answer
22
+ class Parser
23
+
24
+ #
25
+ # = whois.nic.as parser
26
+ #
27
+ # Parser for the whois.nic.as server.
28
+ #
29
+ # NOTE: This parser is just a stub and provides only a few basic methods
30
+ # to check for domain availability and get domain status.
31
+ # Please consider to contribute implementing missing methods.
32
+ # See WhoisNicIt parser for an explanation of all available methods
33
+ # and examples.
34
+ #
35
+ class WhoisNicAs < Base
36
+
37
+ property_supported :status do
38
+ @status ||= if available?
39
+ :available
40
+ else
41
+ :registered
42
+ end
43
+ end
44
+
45
+ property_supported :available? do
46
+ @available ||= !!(content_for_scanner =~ /Domain Not Found/)
47
+ end
48
+
49
+ property_supported :registered? do
50
+ !available?
51
+ end
52
+
53
+
54
+ property_not_supported :created_on
55
+
56
+ property_not_supported :updated_on
57
+
58
+ property_not_supported :expires_on
59
+
60
+
61
+ property_supported :nameservers do
62
+ @nameservers ||= if content_for_scanner =~ /Nameservers:\s((.+\n)+)\n/
63
+ $1.split("\n").map { |value| value.strip.split(" ").first }.compact
64
+ else
65
+ []
66
+ end
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+ end
73
+ end
@@ -83,13 +83,13 @@ module Whois
83
83
  end
84
84
  end
85
85
 
86
- property_supported :registrant do
86
+ property_supported :registrant_contact do
87
87
  return unless registered?
88
- return @registrant if @registrant
88
+ return @registrant_contact if @registrant_contact
89
89
 
90
90
  address, city, zip, country_code = decompose_address(node('address'))
91
91
 
92
- @registrant = Answer::Contact.new(
92
+ @registrant_contact = Answer::Contact.new(
93
93
  :name => node('name'),
94
94
  :organization => node('org'),
95
95
  :address => address,
@@ -101,12 +101,12 @@ module Whois
101
101
  )
102
102
  end
103
103
 
104
- property_supported :admin do
105
- contact('admin-c')
104
+ property_supported :admin_contact do
105
+ @admin_contact ||= contact('admin-c')
106
106
  end
107
107
 
108
- property_supported :technical do
109
- contact('tech-c')
108
+ property_supported :technical_contact do
109
+ @tecnical_contact ||= contact('tech-c')
110
110
  end
111
111
 
112
112
 
@@ -94,20 +94,20 @@ module Whois
94
94
 
95
95
  # If available, returns a <tt>Whois::Answer::Contact</tt> record
96
96
  # containing the registrant details extracted from the registry answer.
97
- property_supported :registrant do
98
- contact("Registrant")
97
+ property_supported :registrant_contact do
98
+ @registrant_contact ||= contact("Registrant")
99
99
  end
100
100
 
101
101
  # If available, returns a <tt>Whois::Answer::Contact</tt> record
102
102
  # containing the admin contact details extracted from the registry answer.
103
- property_supported :admin do
104
- contact("Admin Contact")
103
+ property_supported :admin_contact do
104
+ @admin_contact ||= contact("Admin Contact")
105
105
  end
106
106
 
107
107
  # If available, returns a <tt>Whois::Answer::Contact</tt> record
108
108
  # containing the technical contact details extracted from the registry answer.
109
- property_supported :technical do
110
- contact("Technical Contacts")
109
+ property_supported :technical_contact do
110
+ @technical_contact ||= contact("Technical Contacts")
111
111
  end
112
112
 
113
113
 
@@ -0,0 +1,81 @@
1
+ #
2
+ # = Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ #
7
+ # Category:: Net
8
+ # Package:: Whois
9
+ # Author:: Simone Carletti <weppos@weppos.net>
10
+ # License:: MIT License
11
+ #
12
+ #--
13
+ #
14
+ #++
15
+
16
+
17
+ require 'whois/answer/parser/base'
18
+
19
+
20
+ module Whois
21
+ class Answer
22
+ class Parser
23
+
24
+ #
25
+ # = whois.nic.st parser
26
+ #
27
+ # Parser for the whois.nic.st server.
28
+ #
29
+ # NOTE: This parser is just a stub and provides only a few basic methods
30
+ # to check for domain availability and get domain status.
31
+ # Please consider to contribute implementing missing methods.
32
+ # See WhoisNicIt parser for an explanation of all available methods
33
+ # and examples.
34
+ #
35
+ class WhoisNicSt < Base
36
+
37
+ property_supported :status do
38
+ @status ||= if available?
39
+ :available
40
+ else
41
+ :registered
42
+ end
43
+ end
44
+
45
+ property_supported :available? do
46
+ @available ||= !!(content_for_scanner =~ /No entries found for domain/)
47
+ end
48
+
49
+ property_supported :registered? do
50
+ !available?
51
+ end
52
+
53
+
54
+ property_supported :created_on do
55
+ @created_on ||= if content_for_scanner =~ /\s+Creation Date:\s+(.*)\n/
56
+ Time.parse($1)
57
+ end
58
+ end
59
+
60
+ property_supported :updated_on do
61
+ @updated_on ||= if content_for_scanner =~ /\s+Updated Date:\s+(.*)\n/
62
+ Time.parse($1)
63
+ end
64
+ end
65
+
66
+ property_not_supported :expires_on
67
+
68
+
69
+ property_supported :nameservers do
70
+ @nameservers ||= if content_for_scanner =~ /Name Servers:\n((.+\n)+)\n?/
71
+ $1.split("\n").map(&:strip)
72
+ else
73
+ []
74
+ end
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+ end
81
+ end
@@ -83,15 +83,15 @@ module Whois
83
83
  end
84
84
  end
85
85
 
86
- property_supported :registrant do
86
+ property_supported :registrant_contact do
87
87
  contact("Registrant")
88
88
  end
89
89
 
90
- property_supported :admin do
90
+ property_supported :admin_contact do
91
91
  contact("Admin")
92
92
  end
93
93
 
94
- property_supported :technical do
94
+ property_supported :technical_contact do
95
95
  contact("Tech")
96
96
  end
97
97
 
data/lib/whois/version.rb CHANGED
@@ -18,8 +18,8 @@ module Whois
18
18
 
19
19
  module Version
20
20
  MAJOR = 1
21
- MINOR = 0
22
- PATCH = 12
21
+ MINOR = 1
22
+ PATCH = 0
23
23
 
24
24
  STRING = [MAJOR, MINOR, PATCH].compact.join('.')
25
25
  end
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+
3
+ class AnswerContactTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @klass = Whois::Answer::Contact
7
+ end
8
+
9
+ def test_initialize
10
+ contact = @klass.new({})
11
+ assert_equal nil, contact.id
12
+ end
13
+
14
+ end
@@ -45,6 +45,24 @@ class AnswerParserBaseTest < Test::Unit::TestCase
45
45
  end
46
46
 
47
47
 
48
+ def test_contacts_should_return_empty_array_with_all_unsupported
49
+ parser = @klass.new(@part)
50
+ assert_equal [], parser.contacts
51
+ end
52
+
53
+ def test_contacts_should_return_all_supported_contacts
54
+ c1 = "1st"
55
+ c2 = "2nd"
56
+ c3 = "3rd"
57
+ klass = Class.new(@klass) do
58
+ register_property(:registrant_contact, :supported) { [c1, c2] }
59
+ register_property(:admin_contact, :supported) { nil }
60
+ register_property(:technical_contact, :supported) { c3 }
61
+ end
62
+ assert_equal [c1, c2, c3], klass.new(@part).contacts
63
+ end
64
+
65
+
48
66
  def test_self_property_registry
49
67
  assert_instance_of Hash, @klass.property_registry
50
68
  end
@@ -0,0 +1,70 @@
1
+ require 'test_helper'
2
+ require 'whois/answer/parser/whois.ausregistry.net.au'
3
+
4
+ class AnswerParserWhoisAusregistryNetAuTest < Whois::Answer::Parser::TestCase
5
+
6
+ def setup
7
+ @klass = Whois::Answer::Parser::WhoisAusregistryNetAu
8
+ @host = "whois.ausregistry.net.au"
9
+ end
10
+
11
+
12
+ def test_status
13
+ parser = @klass.new(load_part('/registered.txt'))
14
+ expected = "ok"
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 = nil
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
+ assert_raise(Whois::PropertyNotSupported) { @klass.new(load_part('/registered.txt')).created_on }
37
+ assert_raise(Whois::PropertyNotSupported) { @klass.new(load_part('/available.txt')).created_on }
38
+ end
39
+
40
+ def test_updated_on
41
+ parser = @klass.new(load_part('/registered.txt'))
42
+ expected = Time.parse("2009-10-12 16:05:44 UTC")
43
+ assert_equal expected, parser.updated_on
44
+ assert_equal expected, parser.instance_eval { @updated_on }
45
+
46
+ parser = @klass.new(load_part('/available.txt'))
47
+ expected = nil
48
+ assert_equal expected, parser.updated_on
49
+ assert_equal expected, parser.instance_eval { @updated_on }
50
+ end
51
+
52
+ def test_expires_on
53
+ assert_raise(Whois::PropertyNotSupported) { @klass.new(load_part('/registered.txt')).expires_on }
54
+ assert_raise(Whois::PropertyNotSupported) { @klass.new(load_part('/available.txt')).expires_on }
55
+ end
56
+
57
+
58
+ def test_nameservers
59
+ parser = @klass.new(load_part('/registered.txt'))
60
+ expected = %w( ns1.google.com ns2.google.com ns3.google.com ns4.google.com )
61
+ assert_equal expected, parser.nameservers
62
+ assert_equal expected, parser.instance_eval { @nameservers }
63
+
64
+ parser = @klass.new(load_part('/available.txt'))
65
+ expected = %w()
66
+ assert_equal expected, parser.nameservers
67
+ assert_equal expected, parser.instance_eval { @nameservers }
68
+ end
69
+
70
+ end