whois 1.5.1 → 1.6.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 (32) hide show
  1. data/CHANGELOG.rdoc +53 -1
  2. data/lib/whois/answer/parser/NOTES.txt +37 -13
  3. data/lib/whois/answer/parser/kero.yachay.pe.rb +78 -0
  4. data/lib/whois/answer/parser/whois.audns.net.au.rb +1 -9
  5. data/lib/whois/answer/parser/whois.domain-registry.nl.rb +1 -0
  6. data/lib/whois/answer/parser/whois.domainregistry.my.rb +81 -0
  7. data/lib/whois/answer/parser/whois.educause.edu.rb +3 -3
  8. data/lib/whois/answer/parser/whois.na-nic.com.na.rb +90 -0
  9. data/lib/whois/answer/parser/whois.netcom.cm.rb +2 -0
  10. data/lib/whois/answer/parser/whois.nic.ac.rb +12 -7
  11. data/lib/whois/answer/parser/whois.nic.ag.rb +1 -1
  12. data/lib/whois/answer/parser/whois.nic.cd.rb +1 -1
  13. data/lib/whois/answer/parser/whois.nic.fr.rb +3 -0
  14. data/lib/whois/answer/parser/whois.nic.gl.rb +11 -7
  15. data/lib/whois/answer/parser/whois.nic.gs.rb +3 -3
  16. data/lib/whois/answer/parser/whois.nic.io.rb +38 -6
  17. data/lib/whois/answer/parser/whois.nic.ki.rb +90 -0
  18. data/lib/whois/answer/parser/whois.nic.md.rb +35 -6
  19. data/lib/whois/answer/parser/whois.nic.mg.rb +90 -0
  20. data/lib/whois/answer/parser/whois.nic.ms.rb +90 -0
  21. data/lib/whois/answer/parser/whois.nic.mu.rb +5 -3
  22. data/lib/whois/answer/parser/whois.nic.net.nf.rb +90 -0
  23. data/lib/whois/answer/parser/whois.nic.net.ng.rb +90 -0
  24. data/lib/whois/answer/parser/whois.nic.tm.rb +99 -0
  25. data/lib/whois/answer/parser/whois.nic.uk.rb +7 -4
  26. data/lib/whois/answer/parser/whois.nic.ve.rb +8 -5
  27. data/lib/whois/answer/parser/whois.pnina.ps.rb +86 -0
  28. data/lib/whois/answer/parser/whois.tznic.or.tz.rb +85 -0
  29. data/lib/whois/definitions/tlds.rb +8 -8
  30. data/lib/whois/version.rb +2 -2
  31. data/whois.gemspec +3 -3
  32. metadata +16 -5
data/CHANGELOG.rdoc CHANGED
@@ -1,10 +1,62 @@
1
1
  = Changelog
2
2
 
3
+
4
+ == Release 1.6.0
5
+
6
+ * SERVER: Updated the .nc TLD definition.
7
+
8
+ * SERVER: Updated the .nf TLD definition.
9
+
10
+ * SERVER: Updated the .ng TLD definition.
11
+
12
+ * SERVER: Updated the .pe TLD definition.
13
+
14
+ * SERVER: Updated the .sb TLD definition.
15
+
16
+ * SERVER: Updated the .ki/.mu TLD definition.
17
+
18
+ * SERVER: Updated the .tf TLD definition.
19
+
20
+ * NEW: Added simple .mg TLD parser (whois.nic.mg).
21
+
22
+ * NEW: Added simple .ms TLD parser (whois.nic.ms).
23
+
24
+ * NEW: Added simple .ms TLD parser (whois.domainregistry.my).
25
+
26
+ * NEW: Added simple .na TLD parser (whois.na-nic.com.na).
27
+
28
+ * NEW: Added simple .nf TLD parser (whois.nic.net.nf).
29
+
30
+ * NEW: Added simple .ng TLD parser (whois.nic.net.ng).
31
+
32
+ * NEW: Added simple .pe TLD parser (kero.yachay.pe).
33
+
34
+ * NEW: Added simple .ps TLD parser (whois.pnina.ps).
35
+
36
+ * NEW: Added simple .ki TLD parser (whois.pnina.ps).
37
+
38
+ * NEW: Added .tm TLD parser (whois.nic.tm).
39
+
40
+ * NEW: Added .tz TLD parser (whois.tznic.or.tz).
41
+
42
+ * CHANGED: Completed .md TLD parser (whois.nic.md).
43
+
44
+ * CHANGED: Completed .io TLD parser (whois.nic.io).
45
+
46
+ * FIXED: Fixed Unknown status `Registration request being processed.' for whois.nic.uk.
47
+
48
+ * FIXED: whois.nic.ve supports expires_on.
49
+
50
+ * FIXED: With some .uk domains, whois.nic.uk parser returns invalid values for nameservers.
51
+
52
+ * FIXED: whois.audns.net.au record can contain multiple statuses.
53
+
54
+
3
55
  == Release 1.5.1
4
56
 
5
57
  * NEW: Added simple .kg TLD parser (whois.domain.kg).
6
58
 
7
- * NEW: Added simple .md TLD parser (whois.nic.md).
59
+ * NEW: Added .md TLD parser (whois.nic.md).
8
60
 
9
61
  * FIXED: Fixed Unknown status `Renewal request being processed.' for whois.nic.uk.
10
62
 
@@ -1,31 +1,55 @@
1
1
  .us
2
2
  .biz
3
3
  .travel
4
- whois.nic.co (.co)
4
+ whois.nic.co
5
5
 
6
- whois.museum (.museum)
7
- whois.cat (.cat)
6
+ whois.museum
7
+ whois.cat
8
8
 
9
9
  .ve
10
10
  .uy
11
11
 
12
- (afilias)
13
- whois.dotmobyregistry.net (.mobi)
14
- whois.afilias.info (.info)
15
- whois.afilias-grs.info (.bz, .gi, .hn, .lc, .mn, .sc, .vc)
16
- whois.aero (.aero)
17
- whois.nic.af (.af)
18
- whois.registry.in (.in)
19
-
20
- whois.nic.af (.af)
21
- whois.nic.gs (.gs)
12
+ # afilias
13
+ whois.dotmobyregistry.net
14
+ whois.afilias.info
15
+ whois.afilias-grs.info
16
+ whois.aero
22
17
 
23
18
  whois.nic.af
19
+ whois.nic.mu
20
+ whois.nic.gl
21
+ whois.nic.gs
22
+ whois.nic.mg
23
+ whois.na-nic.com.na
24
+ kero.yachay.pe
24
25
  whois.kenic.or.ke
25
26
 
27
+ # http://coccaregistry.net/index.php/whois.html
28
+ whois.nic.cx
29
+ whois.nic.gs
30
+ whois.nic.ki
31
+ whois.nic.net.nf
32
+ whois.nic.net.sb
33
+ whois.nic.tl
34
+ whois.nic.ms
35
+
36
+ # AFNIC
37
+ whois.nic.fr
38
+ whois.nic.pm (CNAME whois.nic.fr)
39
+ whois.nic.re (CNAME whois.nic.fr)
40
+ whois.nic.wf (CNAME whois.nic.fr)
41
+ whois.nic.tf (CNAME whois.nic.fr)
42
+ whois.nic.yt (CNAME whois.nic.fr)
43
+
44
+ whois.nic.cz
45
+ whois.tznic.or.tz
26
46
  whois.pandi.or.id
27
47
  whois.nic.ir
28
48
  ripe.net
29
49
 
50
+ whois.nic.ac
51
+ whois.nic.io
52
+ whois.nic.tm
53
+
30
54
  whois.gg
31
55
  whois.je
@@ -0,0 +1,78 @@
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
+ # = kero.yachay.pe parser
26
+ #
27
+ # Parser for the kero.yachay.pe 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 KeroYachayPe < Base
36
+
37
+ property_supported :status do
38
+ @status ||= if content_for_scanner =~ /Status:\s+(.+?)\n/
39
+ case $1.downcase
40
+ when "active" then :registered
41
+ when "not registered" then :available
42
+ else
43
+ Whois.bug!(ParserError, "Unknown status `#{$1}'.")
44
+ end
45
+ else
46
+ Whois.bug!(ParserError, "Unable to parse status.")
47
+ end
48
+ end
49
+
50
+ property_supported :available? do
51
+ @available ||= (status == :available)
52
+ end
53
+
54
+ property_supported :registered? do
55
+ @registered ||= !available?
56
+ end
57
+
58
+
59
+ property_not_supported :created_on
60
+
61
+ property_not_supported :updated_on
62
+
63
+ property_not_supported :expires_on
64
+
65
+
66
+ property_supported :nameservers do
67
+ @nameservers ||= if content_for_scanner =~ /Name Servers:\n((.+\n)+)\n/
68
+ $1.split("\n").map(&:strip)
69
+ else
70
+ []
71
+ end
72
+ end
73
+
74
+ end
75
+
76
+ end
77
+ end
78
+ end
@@ -35,15 +35,7 @@ module Whois
35
35
  class WhoisAudnsNetAu < Base
36
36
 
37
37
  property_supported :status do
38
- @status ||= if content_for_scanner =~ /Status:\s+(.+?)\n/
39
- case $1.downcase
40
- when "ok" then :registered
41
- else
42
- Whois.bug!(ParserError, "Unknown status `#{$1}'.")
43
- end
44
- else
45
- :available
46
- end
38
+ @status ||= content_for_scanner.scan(/Status:\s+(.+?)\n/).flatten
47
39
  end
48
40
 
49
41
  property_supported :available? do
@@ -38,6 +38,7 @@ module Whois
38
38
  @status ||= if content_for_scanner =~ /Status:\s+(.*?)\n/
39
39
  case $1.downcase
40
40
  when "active" then :registered
41
+ # NEWSTATUS
41
42
  when "in quarantine" then :quarantine
42
43
  else
43
44
  Whois.bug!(ParserError, "Unknown status `#{$1}'.")
@@ -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.domainregistry.my parser
26
+ #
27
+ # Parser for the whois.domainregistry.my 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 WhoisDomainregistryMy < 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 Name [^ ]+ does not exist in database/)
47
+ end
48
+
49
+ property_supported :registered? do
50
+ @registered ||= !available?
51
+ end
52
+
53
+
54
+ property_supported :created_on do
55
+ @created_on ||= if content_for_scanner =~ /\[Record Created\]\s+(.+?)\n/
56
+ Time.parse($1)
57
+ end
58
+ end
59
+
60
+ property_supported :updated_on do
61
+ @updated_on ||= if content_for_scanner =~ /\[Record Last Modified\]\s+(.+?)\n/
62
+ Time.parse($1)
63
+ end
64
+ end
65
+
66
+ property_supported :expires_on do
67
+ @expires_on ||= if content_for_scanner =~ /\[Record Expired\]\s+(.+?)\n/
68
+ Time.parse($1)
69
+ end
70
+ end
71
+
72
+
73
+ property_supported :nameservers do
74
+ @nameservers ||= content_for_scanner.scan(/\[(?:Primary|Secondary) Name Server\](?:.+?)\n(.+\n)/).flatten.map { |value| value.split(" ").first }
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+ end
81
+ end
@@ -52,19 +52,19 @@ module Whois
52
52
 
53
53
 
54
54
  property_supported :created_on do
55
- @created_on ||= if content_for_scanner =~ /Domain record activated:\s+(.*)\n/
55
+ @created_on ||= if content_for_scanner =~ /Domain record activated:\s+(.+?)\n/
56
56
  Time.parse($1)
57
57
  end
58
58
  end
59
59
 
60
60
  property_supported :updated_on do
61
- @updated_on ||= if content_for_scanner =~ /Domain record last updated:\s+(.*)\n/
61
+ @updated_on ||= if content_for_scanner =~ /Domain record last updated:\s+(.+?)\n/
62
62
  Time.parse($1)
63
63
  end
64
64
  end
65
65
 
66
66
  property_supported :expires_on do
67
- @expires_on ||= if content_for_scanner =~ /Domain expires:\s+(.*)\n/
67
+ @expires_on ||= if content_for_scanner =~ /Domain expires:\s+(.+?)\n/
68
68
  Time.parse($1)
69
69
  end
70
70
  end
@@ -0,0 +1,90 @@
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.na-nic.com.na parser
26
+ #
27
+ # Parser for the whois.na-nic.com.na 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 WhoisNaNicComNa < Base
36
+
37
+ property_supported :status do
38
+ @status ||= if content_for_scanner =~ /Status:\s+(.+?)\n/
39
+ case $1.downcase
40
+ when "active" then :registered
41
+ when "not registered" then :available
42
+ else
43
+ Whois.bug!(ParserError, "Unknown status `#{$1}'.")
44
+ end
45
+ else
46
+ Whois.bug!(ParserError, "Unable to parse status.")
47
+ end
48
+ end
49
+
50
+ property_supported :available? do
51
+ @available ||= (status == :available)
52
+ end
53
+
54
+ property_supported :registered? do
55
+ @registered ||= !available?
56
+ end
57
+
58
+
59
+ property_supported :created_on do
60
+ @created_on ||= if content_for_scanner =~ /Created:\s+(.+?)\n/
61
+ Time.parse($1)
62
+ end
63
+ end
64
+
65
+ property_supported :updated_on do
66
+ @updated_on ||= if content_for_scanner =~ /Modified:\s+(.+?)\n/
67
+ Time.parse($1)
68
+ end
69
+ end
70
+
71
+ property_supported :expires_on do
72
+ @expires_on ||= if content_for_scanner =~ /Expires:\s+(.+?)\n/
73
+ Time.parse($1)
74
+ end
75
+ end
76
+
77
+
78
+ property_supported :nameservers do
79
+ @nameservers ||= if content_for_scanner =~ /Name Servers:\n((.+\n)+)\n/
80
+ $1.split("\n").map { |value| value.strip.downcase }
81
+ else
82
+ []
83
+ end
84
+ end
85
+
86
+ end
87
+
88
+ end
89
+ end
90
+ end
@@ -42,6 +42,8 @@ module Whois
42
42
  else
43
43
  Whois.bug!(ParserError, "Unknown status `#{$1}'.")
44
44
  end
45
+ else
46
+ Whois.bug!(ParserError, "Unable to parse status.")
45
47
  end
46
48
  end
47
49
 
@@ -30,16 +30,21 @@ module Whois
30
30
 
31
31
  property_not_supported :disclaimer
32
32
 
33
+
33
34
  property_supported :domain do
34
- @domain ||= Proc.new do
35
- content_for_scanner =~ /Domain "(.*?)"/
35
+ @domain ||= if content_for_scanner =~ /Domain "(.+?)"/
36
36
  $1.downcase
37
- end.call
37
+ end
38
38
  end
39
39
 
40
40
  property_not_supported :domain_id
41
41
 
42
42
 
43
+ property_not_supported :referral_whois
44
+
45
+ property_not_supported :referral_url
46
+
47
+
43
48
  property_supported :status do
44
49
  @status ||= if available?
45
50
  :available
@@ -49,7 +54,7 @@ module Whois
49
54
  end
50
55
 
51
56
  property_supported :available? do
52
- @available ||= !(content_for_scanner =~ /Not available/)
57
+ @available ||= !!(content_for_scanner =~ /- Available/)
53
58
  end
54
59
 
55
60
  property_supported :registered? do
@@ -77,13 +82,13 @@ module Whois
77
82
 
78
83
 
79
84
  # NEWPROPERTY
80
- property_supported :changed? do |other|
85
+ def changed?(other)
81
86
  !unchanged?(other)
82
87
  end
83
88
 
84
89
  # NEWPROPERTY
85
- property_supported :unchanged? do |other|
86
- self == other ||
90
+ def unchanged?(other)
91
+ self.equal?(other) ||
87
92
  self.content_for_scanner == other.content_for_scanner
88
93
  end
89
94
 
@@ -35,7 +35,7 @@ module Whois
35
35
  class WhoisNicAg < Base
36
36
 
37
37
  property_supported :status do
38
- @status ||= content_for_scanner.scan(/Status:(.*?)\n+/).flatten
38
+ @status ||= content_for_scanner.scan(/Status:(.+?)\n+/).flatten
39
39
  end
40
40
 
41
41
  property_supported :available? do
@@ -35,7 +35,7 @@ module Whois
35
35
  class WhoisNicCd < Base
36
36
 
37
37
  property_supported :status do
38
- content_for_scanner.scan(/\s+Domain Status:\s+(.+?)\n/).flatten
38
+ @status ||= content_for_scanner.scan(/\s+Domain Status:\s+(.+?)\n/).flatten
39
39
  end
40
40
 
41
41
  property_supported :available? do
@@ -38,6 +38,8 @@ module Whois
38
38
  @status ||= if content_for_scanner =~ /status:\s+(.+)\n/
39
39
  case $1.downcase
40
40
  when "active" then :registered
41
+ # NEWSTATUS
42
+ when "frozen" then :frozen
41
43
  else
42
44
  Whois.bug!(ParserError, "Unknown status `#{$1}'.")
43
45
  end
@@ -69,6 +71,7 @@ module Whois
69
71
  end
70
72
  end
71
73
 
74
+ # TODO: Use anniversary
72
75
  property_not_supported :expires_on
73
76
 
74
77
 
@@ -35,11 +35,15 @@ module Whois
35
35
  class WhoisNicGl < Base
36
36
 
37
37
  property_supported :status do
38
- @status ||= if content_for_scanner =~ /Status:\s+(.*?)\n/
39
- case $1.downcase.to_sym
40
- when :"active" then :registered
41
- when :"not registered" then :available
38
+ @status ||= if content_for_scanner =~ /Status:\s+(.+?)\n/
39
+ case $1.downcase
40
+ when "active" then :registered
41
+ when "not registered" then :available
42
+ else
43
+ Whois.bug!(ParserError, "Unknown status `#{$1}'.")
42
44
  end
45
+ else
46
+ Whois.bug!(ParserError, "Unable to parse status.")
43
47
  end
44
48
  end
45
49
 
@@ -53,19 +57,19 @@ module Whois
53
57
 
54
58
 
55
59
  property_supported :created_on do
56
- @created_on ||= if content_for_scanner =~ /Created:\s+(.*?)\n/
60
+ @created_on ||= if content_for_scanner =~ /Created:\s+(.+?)\n/
57
61
  Time.parse($1)
58
62
  end
59
63
  end
60
64
 
61
65
  property_supported :updated_on do
62
- @updated_on ||= if content_for_scanner =~ /Modified:\s+(.*?)\n/
66
+ @updated_on ||= if content_for_scanner =~ /Modified:\s+(.+?)\n/
63
67
  Time.parse($1)
64
68
  end
65
69
  end
66
70
 
67
71
  property_supported :expires_on do
68
- @expires_on ||= if content_for_scanner =~ /Expires:\s+(.*?)\n/
72
+ @expires_on ||= if content_for_scanner =~ /Expires:\s+(.+?)\n/
69
73
  Time.parse($1)
70
74
  end
71
75
  end
@@ -57,19 +57,19 @@ module Whois
57
57
 
58
58
 
59
59
  property_supported :created_on do
60
- @created_on ||= if content_for_scanner =~ /Created:\s+(.*)\n/
60
+ @created_on ||= if content_for_scanner =~ /Created:\s+(.+?)\n/
61
61
  Time.parse($1)
62
62
  end
63
63
  end
64
64
 
65
65
  property_supported :updated_on do
66
- @updated_on ||= if content_for_scanner =~ /Modified:\s+(.*)\n/
66
+ @updated_on ||= if content_for_scanner =~ /Modified:\s+(.+?)\n/
67
67
  Time.parse($1)
68
68
  end
69
69
  end
70
70
 
71
71
  property_supported :expires_on do
72
- @expires_on ||= if content_for_scanner =~ /Expires:\s+(.*)\n/
72
+ @expires_on ||= if content_for_scanner =~ /Expires:\s+(.+?)\n/
73
73
  Time.parse($1)
74
74
  end
75
75
  end
@@ -26,14 +26,25 @@ module Whois
26
26
  #
27
27
  # Parser for the whois.nic.io server.
28
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
29
  class WhoisNicIo < Base
36
30
 
31
+ property_not_supported :disclaimer
32
+
33
+
34
+ property_supported :domain do
35
+ @domain ||= if content_for_scanner =~ /Domain "(.+?)"/
36
+ $1.downcase
37
+ end
38
+ end
39
+
40
+ property_not_supported :domain_id
41
+
42
+
43
+ property_not_supported :referral_whois
44
+
45
+ property_not_supported :referral_url
46
+
47
+
37
48
  property_supported :status do
38
49
  @status ||= if available?
39
50
  :available
@@ -58,8 +69,29 @@ module Whois
58
69
  property_not_supported :expires_on
59
70
 
60
71
 
72
+ property_not_supported :registrar
73
+
74
+ property_not_supported :registrant_contact
75
+
76
+ property_not_supported :admin_contact
77
+
78
+ property_not_supported :technical_contact
79
+
80
+
61
81
  property_not_supported :nameservers
62
82
 
83
+
84
+ # NEWPROPERTY
85
+ def changed?(other)
86
+ !unchanged?(other)
87
+ end
88
+
89
+ # NEWPROPERTY
90
+ def unchanged?(other)
91
+ self.equal?(other) ||
92
+ self.content_for_scanner == other.content_for_scanner
93
+ end
94
+
63
95
  end
64
96
 
65
97
  end