whois 3.1.2 → 3.1.3

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZWE5ZmZkZDMwNzgwMWM0MjA1MmEwYzM5MGE0ZGUyYjcxMTU0NzY1Nw==
4
+ MTA5M2JmNjY4ZTljMzgwMWY2ZDhjYTFiNTQ4YTBiNGEyMmQ1ZDM2Ng==
5
5
  data.tar.gz: !binary |-
6
- Y2M1MmFiN2JhZjIzYzA1OWFjZTUwZjQzODRiODQ5M2JmMDQ4MzYzZQ==
6
+ Zjc5ZGQ3MGE0ZjU4MTY1NzE2MjNmNDk0MTA2ZTIxZmRmM2Q1NzQ2NQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MzFmNDMyNTM4MTEzMzE3ZGNlM2M5ZTRhYWZkZWNiNmM2ZTExNDdhN2EzYTgz
10
- YTI1NGM2ZjUxZjhiZWM0NzQ0Mzc4NGIwNDZjODg0ZmZlNzcxZmUyYmViZmZi
11
- ODJjZjhiNjE2MDg4Y2FiMjEzMDlhNDc4ZDA1Yjc3ZjE1ZDljZDY=
9
+ NGI2NmVhNzFiODVmMmNkNzAzODFmNzFjYjRiNzQ5NGEzMmExZjJlMDBjYTMw
10
+ MTdmNjdlYmJhMTRjMjNlOWIyYmFkNGYxZGI3MTEwM2JmYmU3YTZlMzFhYWZi
11
+ NjMzZjcyZGJkZWViZmRhNzE3OTY5MDE4MWM4NWI3MmMwNGQyMDk=
12
12
  data.tar.gz: !binary |-
13
- NDc1OTNjZjg1ZDA3ZDM3MjE2ZTNjMThiNWFkZDQyMTM1NmQ2MWEzY2JkMzc4
14
- MGNiN2IyNWQ3ZDJhYWEyZDcxYzU1ZTRhMzZkYTQ2YWMyMzNkYzgxY2E5MTFl
15
- OTBkNzk5MmM2NGQ3NjA1Y2VmODMzMWIzNGVhYWE0NDMxNGQ2MjY=
13
+ NDBlN2JlMTJhMzdkOWY5MGM4NDg2MzNlZWZjNWZiYTJlZWE3NzRiYzk0ZGM5
14
+ NTBkM2Y0ZWQ4ZGEyNTQwOTYwNTVhYzVhYzUyZWEyOWViMmNlY2Q3YzdhNzYw
15
+ YmQ1OGQ3MTNiYTJmZGE1NWQzMDlhYWYyMTBiOTI5YWRiOGNjMmU=
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## Release 3.1.3
4
+
5
+ - SERVER: Updated .GD (GH-227), .TC (GH-228) TLD definitions.
6
+
7
+ - NEW: Added full whois.meridiantld.net parser (GH-228).
8
+
9
+ - NEW: Added full whois.nic.gd parser (GH-227).
10
+
11
+ - CHANGED: whois.nic.it status is :unavailable when the whois status is `unassignable`
12
+
13
+ - FIXED: whois.denic.de parser crashes when error 55000000010
14
+
15
+ - FIXED: whois.nic.it crashes when status is `reserved` (GH-233).
16
+
17
+ - FIXED: whois.ua is mixing two kinds of responses (GH-235).
18
+
3
19
 
4
20
  ## Release 3.1.2
5
21
 
@@ -494,7 +494,7 @@
494
494
  "adapter": "none"
495
495
  },
496
496
  ".gd": {
497
- "host": "whois.adamsnames.tc"
497
+ "host": "whois.nic.gd"
498
498
  },
499
499
  ".ge": {
500
500
  "host": null,
@@ -991,7 +991,7 @@
991
991
  "adapter": "none"
992
992
  },
993
993
  ".tc": {
994
- "host": "whois.adamsnames.tc"
994
+ "host": "whois.meridiantld.net"
995
995
  },
996
996
  ".td": {
997
997
  "host": null,
@@ -18,8 +18,6 @@ module Whois
18
18
  # Shared parser 1.
19
19
  #
20
20
  # @abstract
21
- #
22
- # @since RELEASE
23
21
  class BaseShared1 < Base
24
22
  include Scanners::Nodable
25
23
 
@@ -18,8 +18,6 @@ module Whois
18
18
  # Shared parser 2.
19
19
  #
20
20
  # @abstract
21
- #
22
- # @since RELEASE
23
21
  class BaseShared2 < Base
24
22
  include Scanners::Nodable
25
23
 
@@ -0,0 +1,134 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2013 Simone Carletti <weppos@weppos.net>
7
+ #++
8
+
9
+
10
+ require 'whois/record/parser/base'
11
+ require 'whois/record/scanners/base_shared3'
12
+
13
+
14
+ module Whois
15
+ class Record
16
+ class Parser
17
+
18
+ # Shared parser 3.
19
+ #
20
+ # @abstract
21
+ class BaseShared3 < Base
22
+ include Scanners::Nodable
23
+
24
+ property_supported :disclaimer do
25
+ node("field:disclaimer")
26
+ end
27
+
28
+
29
+ property_supported :domain do
30
+ node("domain name", &:downcase)
31
+ end
32
+
33
+ property_not_supported :domain_id
34
+
35
+
36
+ property_supported :status do
37
+ if available?
38
+ :available
39
+ else
40
+ :registered
41
+ end
42
+ end
43
+
44
+ property_supported :available? do
45
+ !!node("status:available")
46
+ end
47
+
48
+ property_supported :registered? do
49
+ !available?
50
+ end
51
+
52
+
53
+ property_supported :created_on do
54
+ node("created date") { |value| Time.parse(value) }
55
+ end
56
+
57
+ property_supported :updated_on do
58
+ node("updated date") { |value| Time.parse(value) }
59
+ end
60
+
61
+ property_supported :expires_on do
62
+ node("expiration date") { |value| Time.parse(value) }
63
+ end
64
+
65
+
66
+ property_supported :registrar do
67
+ node("registrar") do |raw|
68
+ Record::Registrar.new(
69
+ :id => nil,
70
+ :name => node("registrar"),
71
+ :organization => nil,
72
+ :url => node("url")
73
+ )
74
+ end
75
+ end
76
+
77
+ property_supported :registrant_contacts do
78
+ build_contact("owner", Whois::Record::Contact::TYPE_REGISTRANT)
79
+ end
80
+
81
+ property_supported :admin_contacts do
82
+ build_contact("admin", Whois::Record::Contact::TYPE_ADMIN)
83
+ end
84
+
85
+ property_supported :technical_contacts do
86
+ build_contact("tech", Whois::Record::Contact::TYPE_TECHNICAL)
87
+ end
88
+
89
+
90
+ property_supported :nameservers do
91
+ node("nameserver") do |array|
92
+ array.map do |name|
93
+ Nameserver.new(:name => name)
94
+ end
95
+ end
96
+ end
97
+
98
+
99
+ # Initializes a new {Scanners::BaseShared3} instance
100
+ # passing the {#content_for_scanner}
101
+ # and calls +parse+ on it.
102
+ #
103
+ # @return [Hash]
104
+ def parse
105
+ Scanners::BaseShared3.new(content_for_scanner).parse
106
+ end
107
+
108
+
109
+ private
110
+
111
+ def build_contact(element, type)
112
+ node("#{element}-contact") do |raw|
113
+ Record::Contact.new(
114
+ :type => type,
115
+ :id => node("#{element}-contact"),
116
+ :name => node("#{element}-name"),
117
+ :organization => node("#{element}-organization"),
118
+ :address => node("#{element}-street"),
119
+ :city => node("#{element}-city"),
120
+ :zip => node("#{element}-zip"),
121
+ :state => nil,
122
+ :country_code => node("#{element}-country"),
123
+ :phone => node("#{element}-phone"),
124
+ :fax => node("#{element}-fax"),
125
+ :email => node("#{element}-email")
126
+ )
127
+ end
128
+ end
129
+
130
+ end
131
+
132
+ end
133
+ end
134
+ end
@@ -25,18 +25,20 @@ module Whois
25
25
 
26
26
 
27
27
  property_supported :domain do
28
- node("Domain Name") { |raw| raw.downcase }
28
+ node("Domain Name", &:downcase)
29
29
  end
30
30
 
31
- property_not_supported :domain_id
31
+ property_supported :domain_id do
32
+ node("Domain ID")
33
+ end
32
34
 
33
35
 
34
36
  property_supported :status do
35
- node("Status")
37
+ node("Domain Status")
36
38
  end
37
39
 
38
40
  property_supported :available? do
39
- node("Registrar").nil?
41
+ node("Sponsoring Registrar").nil?
40
42
  end
41
43
 
42
44
  property_supported :registered? do
@@ -45,24 +47,25 @@ module Whois
45
47
 
46
48
 
47
49
  property_supported :created_on do
48
- node("Creation Date") { |raw| Time.parse(raw) }
50
+ node("Creation Date") { |value| Time.parse(value) }
49
51
  end
50
52
 
51
53
  property_supported :updated_on do
52
- node("Updated Date") { |raw| Time.parse(raw) }
54
+ node("Updated Date") { |value| Time.parse(value) }
53
55
  end
54
56
 
55
57
  property_supported :expires_on do
56
- node("Expiration Date") { |raw| Time.parse(raw) }
58
+ node("Expiration Date") { |value| Time.parse(value) }
57
59
  end
58
60
 
59
61
 
60
62
  property_supported :registrar do
61
- node("Registrar") do |raw|
63
+ node("Sponsoring Registrar") do |value|
62
64
  Whois::Record::Registrar.new(
63
- :name => last_useful_item(raw),
64
- :organization => last_useful_item(raw),
65
- :url => referral_url
65
+ :id => node("Sponsoring Registrar IANA ID"),
66
+ :name => value,
67
+ :organization => value,
68
+ :url => referral_url
66
69
  )
67
70
  end
68
71
  end
@@ -80,9 +83,7 @@ module Whois
80
83
  end
81
84
 
82
85
  def referral_url
83
- node("Referral URL") do |lines|
84
- last_useful_item(lines)
85
- end
86
+ node("Referral URL")
86
87
  end
87
88
 
88
89
 
@@ -95,15 +96,6 @@ module Whois
95
96
  Scanners::Verisign.new(content_for_scanner).parse
96
97
  end
97
98
 
98
-
99
- private
100
-
101
- # In case of "SPAM Response", the response contains more than one item
102
- # for the same value and the value becomes an Array.
103
- def last_useful_item(values)
104
- values.is_a?(Array) ? values.last : values
105
- end
106
-
107
99
  end
108
100
 
109
101
  end
@@ -36,32 +36,28 @@ module Whois
36
36
 
37
37
 
38
38
  property_supported :status do
39
- if node("Status")
40
- case node("Status")
41
- when "connect" then :registered
42
- when "free" then :available
43
- when "invalid" then :invalid
44
- # NEWSTATUS (inactive)
45
- # The domain is registered, but there is not DNS entry for it.
46
- when "failed" then :registered
47
- else
48
- Whois.bug!(ParserError, "Unknown status `#{node("Status")}'.")
49
- end
39
+ case node("Status")
40
+ when "connect"
41
+ :registered
42
+ when "free"
43
+ :available
44
+ when "invalid"
45
+ :invalid
46
+ # NEWSTATUS (inactive)
47
+ # The domain is registered, but there is not DNS entry for it.
48
+ when "failed"
49
+ :registered
50
50
  else
51
- if version < "2.0"
52
- if invalid?
53
- :invalid
54
- else
55
- :available
56
- end
51
+ if response_error?
52
+ :invalid
57
53
  else
58
- Whois.bug!(ParserError, "Unable to parse status.")
54
+ Whois.bug!(ParserError, "Unknown status `#{node("Status")}'.")
59
55
  end
60
56
  end
61
57
  end
62
58
 
63
59
  property_supported :available? do
64
- !invalid? && (!!node("status:available") || node("Status") == "free")
60
+ !invalid? && node("Status") == "free"
65
61
  end
66
62
 
67
63
  property_supported :registered? do
@@ -72,7 +68,7 @@ module Whois
72
68
  property_not_supported :created_on
73
69
 
74
70
  property_supported :updated_on do
75
- node("Changed") { |raw| Time.parse(raw) }
71
+ node("Changed") { |value| Time.parse(value) }
76
72
  end
77
73
 
78
74
  property_not_supported :expires_on
@@ -97,8 +93,6 @@ module Whois
97
93
  build_contact("Admin-C", Whois::Record::Contact::TYPE_ADMIN)
98
94
  end
99
95
 
100
- # FIXME: check against different schema
101
-
102
96
  property_supported :technical_contacts do
103
97
  build_contact("Tech-C", Whois::Record::Contact::TYPE_TECHNICAL)
104
98
  end
@@ -130,6 +124,10 @@ module Whois
130
124
  !!node("response:throttled")
131
125
  end
132
126
 
127
+ def response_error?
128
+ !!node("response:error")
129
+ end
130
+
133
131
 
134
132
  # NEWPROPERTY
135
133
  def version
@@ -143,7 +141,8 @@ module Whois
143
141
  # NEWPROPERTY
144
142
  def invalid?
145
143
  cached_properties_fetch :invalid? do
146
- !!node("status:invalid") || node("Status") == "invalid"
144
+ node("Status") == "invalid" ||
145
+ response_error?
147
146
  end
148
147
  end
149
148
 
@@ -14,25 +14,24 @@ module Whois
14
14
  class Record
15
15
  class Parser
16
16
 
17
- #
18
- # = whois.in.ua parser
19
- #
20
17
  # Parser for the whois.in.ua server.
21
18
  #
22
- # NOTE: This parser is just a stub and provides only a few basic methods
23
- # to check for domain availability and get domain status.
24
- # Please consider to contribute implementing missing methods.
25
- # See WhoisNicIt parser for an explanation of all available methods
26
- # and examples.
19
+ # @note This parser is just a stub and provides only a few basic methods
20
+ # to check for domain availability and get domain status.
21
+ # Please consider to contribute implementing missing methods.
22
+ #
23
+ # @see Whois::Record::Parser::Example
24
+ # The Example parser for the list of all available methods.
27
25
  #
28
26
  class WhoisInUa < Base
29
27
 
30
28
  property_supported :status do
31
29
  if content_for_scanner =~ /status:\s+(.+?)\n/
32
30
  case $1.split("-").first.downcase
33
- when "ok" then :registered
34
- else
35
- Whois.bug!(ParserError, "Unknown status `#{$1}'.")
31
+ when "ok"
32
+ :registered
33
+ else
34
+ Whois.bug!(ParserError, "Unknown status `#{$1}'.")
36
35
  end
37
36
  else
38
37
  :available
@@ -53,21 +52,21 @@ module Whois
53
52
  property_supported :updated_on do
54
53
  if content_for_scanner =~ /changed:\s+(.*)\n/
55
54
  time = $1.split(" ").last
56
- DateTime.strptime(time, "%Y%m%d%H%M%S").to_time
55
+ Time.strptime(time, "%Y%m%d%H%M%S")
57
56
  end
58
57
  end
59
58
 
60
59
  property_supported :expires_on do
61
60
  if content_for_scanner =~ /status:\s+(.*)\n/
62
61
  time = $1.split(" ").last
63
- DateTime.strptime(time, "%Y%m%d%H%M%S").to_time
62
+ Time.strptime(time, "%Y%m%d%H%M%S")
64
63
  end
65
64
  end
66
65
 
67
66
 
68
67
  property_supported :nameservers do
69
68
  content_for_scanner.scan(/nserver:\s+(.+)\n/).flatten.map do |name|
70
- Record::Nameserver.new(:name => name.strip.downcase)
69
+ Record::Nameserver.new(name: name.strip.downcase)
71
70
  end
72
71
  end
73
72
 
@@ -0,0 +1,27 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2013 Simone Carletti <weppos@weppos.net>
7
+ #++
8
+
9
+
10
+ require 'whois/record/parser/base_cocca2'
11
+
12
+
13
+ module Whois
14
+ class Record
15
+ class Parser
16
+
17
+ # Parser for the whois.meridiantld.net server.
18
+ #
19
+ # @see Whois::Record::Parser::Example
20
+ # The Example parser for the list of all available methods.
21
+ #
22
+ class WhoisMeridiantldNet < BaseCocca2
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -25,18 +25,20 @@ module Whois
25
25
 
26
26
 
27
27
  property_supported :domain do
28
- node("Domain Name") { |raw| raw.downcase }
28
+ node("Domain Name", &:downcase)
29
29
  end
30
30
 
31
- property_not_supported :domain_id
31
+ property_supported :domain_id do
32
+ node("Domain ID")
33
+ end
32
34
 
33
35
 
34
36
  property_supported :status do
35
- node("Status")
37
+ node("Domain Status")
36
38
  end
37
39
 
38
40
  property_supported :available? do
39
- node("Registrar").nil?
41
+ node("Sponsoring Registrar").nil?
40
42
  end
41
43
 
42
44
  property_supported :registered? do
@@ -45,22 +47,27 @@ module Whois
45
47
 
46
48
 
47
49
  property_supported :created_on do
48
- node("Creation Date") { |raw| Time.parse(raw) }
50
+ node("Creation Date") { |value| Time.parse(value) }
49
51
  end
50
52
 
51
53
  property_supported :updated_on do
52
- node("Updated Date") { |raw| Time.parse(raw) }
54
+ node("Updated Date") { |value| Time.parse(value) }
53
55
  end
54
56
 
55
57
  property_supported :expires_on do
56
- node("Expiration Date") { |raw| Time.parse(raw) }
58
+ node("Expiration Date") { |value| Time.parse(value) }
57
59
  end
58
60
 
59
61
 
60
62
  property_supported :registrar do
61
- # Return nil because when the response contains more than one registrar section
62
- # the response can be messy. See, for instance, the Verisign response for google.com.
63
- nil
63
+ node("Sponsoring Registrar") do |value|
64
+ Whois::Record::Registrar.new(
65
+ :id => node("Sponsoring Registrar IANA ID"),
66
+ :name => value,
67
+ :organization => value,
68
+ :url => referral_url
69
+ )
70
+ end
64
71
  end
65
72
 
66
73
 
@@ -7,8 +7,7 @@
7
7
  #++
8
8
 
9
9
 
10
- require 'whois/record/parser/base'
11
- require 'whois/record/scanners/whois.nic.dm.rb'
10
+ require 'whois/record/parser/base_shared3'
12
11
 
13
12
 
14
13
  module Whois
@@ -20,116 +19,7 @@ module Whois
20
19
  # @see Whois::Record::Parser::Example
21
20
  # The Example parser for the list of all available methods.
22
21
  #
23
- # @since RELEASE
24
- class WhoisNicDm < Base
25
- include Scanners::Nodable
26
-
27
- property_supported :disclaimer do
28
- node("field:disclaimer")
29
- end
30
-
31
-
32
- property_supported :domain do
33
- node("domain name", &:downcase)
34
- end
35
-
36
- property_not_supported :domain_id
37
-
38
-
39
- property_supported :status do
40
- if available?
41
- :available
42
- else
43
- :registered
44
- end
45
- end
46
-
47
- property_supported :available? do
48
- !!node("status:available")
49
- end
50
-
51
- property_supported :registered? do
52
- !available?
53
- end
54
-
55
-
56
- property_supported :created_on do
57
- node("created date") { |value| Time.parse(value) }
58
- end
59
-
60
- property_supported :updated_on do
61
- node("updated date") { |value| Time.parse(value) }
62
- end
63
-
64
- property_supported :expires_on do
65
- node("expiration date") { |value| Time.parse(value) }
66
- end
67
-
68
-
69
- property_supported :registrar do
70
- node("registrar") do |raw|
71
- Record::Registrar.new(
72
- :id => nil,
73
- :name => node("registrar"),
74
- :organization => nil,
75
- :url => node("url")
76
- )
77
- end
78
- end
79
-
80
- property_supported :registrant_contacts do
81
- build_contact("owner", Whois::Record::Contact::TYPE_REGISTRANT)
82
- end
83
-
84
- property_supported :admin_contacts do
85
- build_contact("admin", Whois::Record::Contact::TYPE_ADMIN)
86
- end
87
-
88
- property_supported :technical_contacts do
89
- build_contact("tech", Whois::Record::Contact::TYPE_TECHNICAL)
90
- end
91
-
92
-
93
- property_supported :nameservers do
94
- node("nameserver") do |array|
95
- array.map do |name|
96
- Nameserver.new(:name => name)
97
- end
98
- end
99
- end
100
-
101
-
102
- # Initializes a new {Scanners::WhoisDnsHr} instance
103
- # passing the {#content_for_scanner}
104
- # and calls +parse+ on it.
105
- #
106
- # @return [Hash]
107
- def parse
108
- Scanners::WhoisNicDm.new(content_for_scanner).parse
109
- end
110
-
111
-
112
- private
113
-
114
- def build_contact(element, type)
115
- node("#{element}-contact") do |raw|
116
- Record::Contact.new(
117
- :type => type,
118
- :id => node("#{element}-contact"),
119
- :name => node("#{element}-name"),
120
- :organization => node("#{element}-organization"),
121
- :address => node("#{element}-street"),
122
- :city => node("#{element}-city"),
123
- :zip => node("#{element}-zip"),
124
- :state => nil,
125
- :country_code => node("#{element}-country"),
126
- :phone => nil,
127
- :fax => nil,
128
- :email => nil
129
- )
130
- end
131
- end
132
-
22
+ class WhoisNicDm < BaseShared3
133
23
  end
134
24
 
135
25
  end
@@ -0,0 +1,27 @@
1
+ #--
2
+ # Ruby Whois
3
+ #
4
+ # An intelligent pure Ruby WHOIS client and parser.
5
+ #
6
+ # Copyright (c) 2009-2013 Simone Carletti <weppos@weppos.net>
7
+ #++
8
+
9
+
10
+ require 'whois/record/parser/base_shared3'
11
+
12
+
13
+ module Whois
14
+ class Record
15
+ class Parser
16
+
17
+ # Parser for the whois.nic.gd server.
18
+ #
19
+ # @see Whois::Record::Parser::Example
20
+ # The Example parser for the list of all available methods.
21
+ #
22
+ class WhoisNicGd < BaseShared3
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -50,6 +50,8 @@ module Whois
50
50
  when /^pendingdelete/
51
51
  :redemption
52
52
  when "unassignable"
53
+ :unavailable
54
+ when "reserved"
53
55
  :reserved
54
56
  when "available"
55
57
  :available
@@ -65,13 +67,13 @@ module Whois
65
67
  end
66
68
 
67
69
  property_supported :registered? do
68
- status != :reserved &&
69
- !available?
70
+ !available? &&
71
+ !unavailable?
70
72
  end
71
73
 
72
74
  # NEWPROPERTY
73
- def reserved?
74
- status == :reserved
75
+ def unavailable?
76
+ status == :unavailable
75
77
  end
76
78
 
77
79
 
@@ -15,10 +15,154 @@ module Whois
15
15
  class Parser
16
16
 
17
17
  # Parser for the whois.ua server.
18
- #
19
- # @since 2.4.0
20
18
  class WhoisUa < Base
21
19
 
20
+ class Epp
21
+ attr_reader :parent, :content
22
+
23
+ def initialize(parent, content)
24
+ @parent = parent
25
+ @content = content
26
+ end
27
+
28
+ def status
29
+ if content =~ /status:\s+(.+?)\n/
30
+ case (s = $1.downcase)
31
+ when "ok"
32
+ :registered
33
+ else
34
+ Whois.bug!(ParserError, "Unknown status `#{s}'.")
35
+ end
36
+ else
37
+ :available
38
+ end
39
+ end
40
+
41
+ def created_on
42
+ if content =~ /created:\s+(.+)\n/
43
+ Time.parse($1)
44
+ end
45
+ end
46
+
47
+ def updated_on
48
+ if content =~ /modified:\s+(.+)\n/
49
+ Time.parse($1)
50
+ end
51
+ end
52
+
53
+ def expires_on
54
+ if content =~ /expires:\s+(.+)\n/
55
+ Time.parse($1)
56
+ end
57
+ end
58
+
59
+
60
+ def build_contact(element, type)
61
+ contact_ids = content.scan(/#{element}:\s+(.+)\n/).flatten
62
+ return if contact_ids.empty?
63
+
64
+ contact_ids.map do |contact_id|
65
+ textblock = content.slice(/contact-id:\s+#{contact_id}\n((?:.+\n)+)\n/, 1)
66
+
67
+ address = textblock.scan(/address:\s+(.+)\n/).flatten
68
+ address = address.reject { |a| a == "n/a" }
69
+
70
+ Record::Contact.new(
71
+ type: type,
72
+ id: contact_id,
73
+ name: textblock.slice(/person:\s+(.+)\n/, 1),
74
+ organization: textblock.slice(/organization:\s+(.+)\n/, 1),
75
+ address: address.join("\n"),
76
+ zip: nil,
77
+ state: nil,
78
+ city: nil,
79
+ country: textblock.slice(/country:\s+(.+)\n/, 1),
80
+ phone: textblock.slice(/phone:\s+(.+)\n/, 1),
81
+ fax: textblock.slice(/fax:\s+(.+)\n/, 1),
82
+ email: textblock.slice(/e-mail:\s+(.+)\n/, 1),
83
+ created_on: Time.parse(textblock.slice(/created:\s+(.+)\n/, 1))
84
+ )
85
+ end
86
+ end
87
+ end
88
+
89
+ class Uanic
90
+ attr_reader :parent, :content
91
+
92
+ def initialize(parent, content)
93
+ @parent = parent
94
+ @content = content
95
+ end
96
+
97
+ def status
98
+ if content =~ /status:\s+(.+?)\n/
99
+ case (s = $1.downcase)
100
+ when /^ok-until/
101
+ :registered
102
+ else
103
+ Whois.bug!(ParserError, "Unknown status `#{s}'.")
104
+ end
105
+ else
106
+ :available
107
+ end
108
+ end
109
+
110
+ def created_on
111
+ if content =~ /created:\s+(.+)\n/
112
+ time = $1.split(" ").last
113
+ Time.parse(time)
114
+ end
115
+ end
116
+
117
+ def updated_on
118
+ if content =~ /changed:\s+(.+)\n/
119
+ time = $1.split(" ").last
120
+ Time.parse(time)
121
+ end
122
+ end
123
+
124
+ def expires_on
125
+ if content =~ /status:\s+(.+)\n/
126
+ time = $1.split(" ").last
127
+ Time.parse(time)
128
+ end
129
+ end
130
+
131
+
132
+ def build_contact(element, type)
133
+ contact_ids = content.scan(/#{element}:\s+(.+)\n/).flatten
134
+ return if contact_ids.empty?
135
+
136
+ contact_ids.map do |contact_id|
137
+ textblock = content.slice(/nic-handle:\s+#{contact_id}\n((?:.+\n)+)\n/, 1)
138
+
139
+ address = textblock.scan(/address:\s+(.+)\n/).flatten
140
+ zip = nil
141
+ zip = address[1].slice!(/\s+\d{5}/).strip if address[1] =~ /\s+\d{5}/
142
+ zip = address[1].slice!(/\d{5}\s+/).strip if address[1] =~ /\d{5}\s+/
143
+ state = nil
144
+ state = address[1].slice!(/\s+[A-Z]{2}\z/).strip if address[1] =~ /\s+[A-Z]{2}\z/
145
+
146
+ Record::Contact.new(
147
+ type: type,
148
+ id: contact_id,
149
+ name: nil,
150
+ organization: textblock.scan(/organization:\s+(.+)\n/).join("\n"),
151
+ address: address[0],
152
+ zip: zip,
153
+ state: state,
154
+ city: address[1],
155
+ country: address[2],
156
+ phone: textblock.slice(/phone:\s+(.+)\n/, 1),
157
+ fax: textblock.slice(/fax-no:\s+(.+)\n/, 1),
158
+ email: textblock.slice(/e-mail:\s+(.+)\n/, 1),
159
+ updated_on: (Time.parse($1.split(" ").last) if textblock =~ /changed:\s+(.+)\n/)
160
+ )
161
+ end
162
+ end
163
+ end
164
+
165
+
22
166
  property_supported :domain do
23
167
  if content_for_scanner =~ /domain:\s+(.+)\n/
24
168
  $1
@@ -29,20 +173,11 @@ module Whois
29
173
 
30
174
 
31
175
  property_supported :status do
32
- if content_for_scanner =~ /status:\s+(.+?)\n/
33
- case (s = $1.downcase)
34
- when "ok", /^ok-until/
35
- :registered
36
- else
37
- Whois.bug!(ParserError, "Unknown status `#{s}'.")
38
- end
39
- else
40
- :available
41
- end
176
+ subparser.status
42
177
  end
43
178
 
44
179
  property_supported :available? do
45
- !!(content_for_scanner =~ /No entries found for domain/)
180
+ !!(content_for_scanner =~ /^% No entries found for/)
46
181
  end
47
182
 
48
183
  property_supported :registered? do
@@ -51,76 +186,51 @@ module Whois
51
186
 
52
187
 
53
188
  property_supported :created_on do
54
- if content_for_scanner =~ /created:\s+(.+)\n/
55
- time = $1.split(" ").last
56
- Time.parse(time) unless time =~ /\A[0]+\z/
57
- end
189
+ subparser.created_on
58
190
  end
59
191
 
60
192
  property_supported :updated_on do
61
- if content_for_scanner =~ /changed:\s+(.+)\n/
62
- time = $1.split(" ").last
63
- Time.parse(time)
64
- end
193
+ subparser.updated_on
65
194
  end
66
195
 
67
196
  property_supported :expires_on do
68
- if content_for_scanner =~ /status:\s+(.+)\n/
69
- time = $1.split(" ").last
70
- Time.parse(time)
71
- end
197
+ subparser.expires_on
72
198
  end
73
199
 
74
200
 
75
201
  property_not_supported :registrar
76
202
 
77
- property_not_supported :registrant_contacts
203
+ property_supported :registrant_contacts do
204
+ subparser.build_contact("registrant", Whois::Record::Contact::TYPE_ADMIN)
205
+ end
78
206
 
79
207
  property_supported :admin_contacts do
80
- build_contact("Administrative", Whois::Record::Contact::TYPE_ADMIN)
208
+ subparser.build_contact("admin-c", Whois::Record::Contact::TYPE_ADMIN)
81
209
  end
82
210
 
83
211
  property_supported :technical_contacts do
84
- build_contact("Technical", Whois::Record::Contact::TYPE_TECHNICAL)
212
+ subparser.build_contact("tech-c", Whois::Record::Contact::TYPE_TECHNICAL)
85
213
  end
86
214
 
87
215
 
88
216
  property_supported :nameservers do
89
217
  content_for_scanner.scan(/nserver:\s+(.+)\n/).flatten.map do |name|
90
- Record::Nameserver.new(:name => name.strip.downcase)
218
+ Record::Nameserver.new(name: name.strip)
91
219
  end
92
220
  end
93
221
 
94
222
 
95
223
  private
96
224
 
97
- def build_contact(element, type)
98
- record = []
99
- content_for_scanner.scan(/%\s#{element}\sContact:\n %\s=+\n ((?: .+\n)+) (?: \n|\z)/ix).flatten.each do |match|
100
- address = match.scan(/address:\s+(.+)\n/).flatten
101
- zip = nil
102
- zip = address[1].slice!(/\s+\d{5}/).strip if address[1] =~ /\s+\d{5}/
103
- zip = address[1].slice!(/\d{5}\s+/).strip if address[1] =~ /\d{5}\s+/
104
- state = nil
105
- state = address[1].slice!(/\s+[A-Z]{2}\z/).strip if address[1] =~ /\s+[A-Z]{2}\z/
106
-
107
- record.push Record::Contact.new(
108
- :type => type,
109
- :id => match[/org-id:\s+(.+)\n/,1],
110
- :name => nil,
111
- :organization => match.scan(/organization:\s+(.+)\n/).join("\n"),
112
- :address => address[0],
113
- :zip => zip,
114
- :state => state,
115
- :city => address[1],
116
- :country => address[2],
117
- :phone => match[/phone:\s+(.+)\n/,1],
118
- :fax => match[/fax-no:\s+(.+)\n/,1],
119
- :email => match[/e-mail:\s+(.+)\n/,1],
120
- :updated_on => (Time.parse($1.split(" ").last) if match =~ /changed:\s+(.+)\n/)
121
- )
225
+ def subparser
226
+ @subparser ||= begin
227
+ source = content_for_scanner.slice(/source:\s+(.+)\n/, 1)
228
+ if source == "UANIC"
229
+ Uanic.new(self, content_for_scanner)
230
+ else
231
+ Epp.new(self, content_for_scanner)
232
+ end
122
233
  end
123
- record
124
234
  end
125
235
 
126
236
  end
@@ -14,10 +14,7 @@ module Whois
14
14
  class Record
15
15
  module Scanners
16
16
 
17
- # Scanner for the whois.nic.dm record.
18
- #
19
- # @since RELEASE
20
- class WhoisNicDm < Base
17
+ class BaseShared3 < Base
21
18
 
22
19
  self.tokenizers += [
23
20
  :scan_disclaimer,
@@ -19,33 +19,14 @@ module Whois
19
19
  self.tokenizers += [
20
20
  :skip_empty_line,
21
21
  :scan_response_throttled,
22
+ :scan_response_error,
22
23
  :scan_disclaimer,
23
- :scan_invalid,
24
- :scan_available,
25
24
  :scan_pair,
26
25
  :scan_contact,
27
26
  :skip_db_time,
28
27
  ]
29
28
 
30
29
 
31
- # Version 1.11.0, 1.10.0
32
- tokenizer :scan_available do
33
- if @input.match?(/% Object ".+" not found in database\n/)
34
- while @input.skip(/%(.*)\n/)
35
- end
36
- @ast["status:available"] = true
37
- end
38
- end
39
-
40
- # Version 1.11.0, 1.10.0
41
- tokenizer :scan_invalid do
42
- if @input.match?(/% ".+" is not a valid domain name\n/)
43
- @input.scan(/% "(.+?)" is not a valid domain name\n/)
44
- @ast["Domain"] = @input[1]
45
- @ast["status:invalid"] = true
46
- end
47
- end
48
-
49
30
  tokenizer :scan_response_throttled do
50
31
  if @input.match?(/^% Error: 55000000002/)
51
32
  @ast["response:throttled"] = true
@@ -53,6 +34,13 @@ module Whois
53
34
  end
54
35
  end
55
36
 
37
+ tokenizer :scan_response_error do
38
+ if @input.match?(/^% Error: 55000000010/)
39
+ @ast["response:error"] = true
40
+ @input.skip(/^.+\n/)
41
+ end
42
+ end
43
+
56
44
  tokenizer :scan_disclaimer do
57
45
  if @input.match?(/% Copyright \(c\) *\d{4} by DENIC\n/)
58
46
  @input.scan_until(/% Terms and Conditions of Use\n/)
@@ -80,8 +68,7 @@ module Whois
80
68
  "organization" => contact['Organisation'],
81
69
  "address" => contact['Address'],
82
70
  "city" => contact['City'],
83
- # 1.10.0, 1.11.0 || 2.0
84
- "zip" => contact['Pcode'] || contact['PostalCode'],
71
+ "zip" => contact['PostalCode'],
85
72
  "state" => nil,
86
73
  "country" => contact['Country'],
87
74
  "country_code" => contact['CountryCode'],
@@ -94,7 +81,6 @@ module Whois
94
81
  end
95
82
  end
96
83
 
97
- # Version 2.0
98
84
  tokenizer :skip_db_time do
99
85
  @input.skip(/^% DB time is (.+)\n/)
100
86
  end
@@ -13,7 +13,7 @@ module Whois
13
13
  module Version
14
14
  MAJOR = 3
15
15
  MINOR = 1
16
- PATCH = 2
16
+ PATCH = 3
17
17
  BUILD = nil
18
18
 
19
19
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join(".")
@@ -6,11 +6,11 @@ Gem::Specification.new do |s|
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Simone Carletti"]
9
- s.date = "2013-05-06"
9
+ s.date = "2013-05-13"
10
10
  s.description = "Whois is an intelligent WHOIS client and parser written in pure Ruby. It can query registry data for IPv4, IPv6 and top level domains, parse and convert responses into easy-to-use Ruby objects."
11
11
  s.email = ["weppos@weppos.net"]
12
12
  s.executables = ["ruby-whois"]
13
- s.files = ["LICENSE.txt", ".yardopts", "CHANGELOG.md", "README.md", "whois.gemspec", "bin/ruby-whois", "data/ipv4.json", "data/ipv6.json", "data/tld.json", "lib/whois/client.rb", "lib/whois/core_ext/array/extract_options.rb", "lib/whois/core_ext/array/wrap.rb", "lib/whois/core_ext/class/attribute.rb", "lib/whois/core_ext/kernel/singleton_class.rb", "lib/whois/core_ext/module/remove_method.rb", "lib/whois/core_ext.rb", "lib/whois/errors.rb", "lib/whois/record/contact.rb", "lib/whois/record/nameserver.rb", "lib/whois/record/parser/base.rb", "lib/whois/record/parser/base_afilias.rb", "lib/whois/record/parser/base_cocca.rb", "lib/whois/record/parser/base_cocca2.rb", "lib/whois/record/parser/base_shared1.rb", "lib/whois/record/parser/base_shared2.rb", "lib/whois/record/parser/base_whoisd.rb", "lib/whois/record/parser/blank.rb", "lib/whois/record/parser/example.rb", "lib/whois/record/parser/jobswhois.verisign-grs.com.rb", "lib/whois/record/parser/kero.yachay.pe.rb", "lib/whois/record/parser/NOTES.txt", "lib/whois/record/parser/whois.adamsnames.tc.rb", "lib/whois/record/parser/whois.aeda.net.ae.rb", "lib/whois/record/parser/whois.aero.rb", "lib/whois/record/parser/whois.afilias-grs.info.rb", "lib/whois/record/parser/whois.afilias.info.rb", "lib/whois/record/parser/whois.ai.rb", "lib/whois/record/parser/whois.arnes.si.rb", "lib/whois/record/parser/whois.ati.tn.rb", "lib/whois/record/parser/whois.audns.net.au.rb", "lib/whois/record/parser/whois.ax.rb", "lib/whois/record/parser/whois.biz.rb", "lib/whois/record/parser/whois.bn.rb", "lib/whois/record/parser/whois.cat.rb", "lib/whois/record/parser/whois.cctld.by.rb", "lib/whois/record/parser/whois.cctld.uz.rb", "lib/whois/record/parser/whois.centralnic.com.rb", "lib/whois/record/parser/whois.cira.ca.rb", "lib/whois/record/parser/whois.cmc.iq.rb", "lib/whois/record/parser/whois.cnnic.cn.rb", "lib/whois/record/parser/whois.co.ca.rb", "lib/whois/record/parser/whois.co.pl.rb", "lib/whois/record/parser/whois.co.ug.rb", "lib/whois/record/parser/whois.comlaude.com.rb", "lib/whois/record/parser/whois.crsnic.net.rb", "lib/whois/record/parser/whois.denic.de.rb", "lib/whois/record/parser/whois.dk-hostmaster.dk.rb", "lib/whois/record/parser/whois.dns.be.rb", "lib/whois/record/parser/whois.dns.hr.rb", "lib/whois/record/parser/whois.dns.lu.rb", "lib/whois/record/parser/whois.dns.pl.rb", "lib/whois/record/parser/whois.dns.pt.rb", "lib/whois/record/parser/whois.domain-registry.nl.rb", "lib/whois/record/parser/whois.domain.kg.rb", "lib/whois/record/parser/whois.domainregistry.ie.rb", "lib/whois/record/parser/whois.domainregistry.my.rb", "lib/whois/record/parser/whois.domreg.lt.rb", "lib/whois/record/parser/whois.dot.tk.rb", "lib/whois/record/parser/whois.dotmobiregistry.net.rb", "lib/whois/record/parser/whois.dotpostregistry.net.rb", "lib/whois/record/parser/whois.dreamhost.com.rb", "lib/whois/record/parser/whois.educause.edu.rb", "lib/whois/record/parser/whois.eenet.ee.rb", "lib/whois/record/parser/whois.enom.com.rb", "lib/whois/record/parser/whois.eu.org.rb", "lib/whois/record/parser/whois.eu.rb", "lib/whois/record/parser/whois.fi.rb", "lib/whois/record/parser/whois.gg.rb", "lib/whois/record/parser/whois.godaddy.com.rb", "lib/whois/record/parser/whois.gov.za.rb", "lib/whois/record/parser/whois.hkirc.hk.rb", "lib/whois/record/parser/whois.iam.net.ma.rb", "lib/whois/record/parser/whois.iana.org.rb", "lib/whois/record/parser/whois.in.ua.rb", "lib/whois/record/parser/whois.isnic.is.rb", "lib/whois/record/parser/whois.isoc.org.il.rb", "lib/whois/record/parser/whois.ja.net.rb", "lib/whois/record/parser/whois.je.rb", "lib/whois/record/parser/whois.jprs.jp.rb", "lib/whois/record/parser/whois.kenic.or.ke.rb", "lib/whois/record/parser/whois.kr.rb", "lib/whois/record/parser/whois.markmonitor.com.rb", "lib/whois/record/parser/whois.meregistry.net.rb", "lib/whois/record/parser/whois.monic.mo.rb", "lib/whois/record/parser/whois.museum.rb", "lib/whois/record/parser/whois.na-nic.com.na.rb", "lib/whois/record/parser/whois.nc.rb", "lib/whois/record/parser/whois.netcom.cm.rb", "lib/whois/record/parser/whois.networksolutions.com.rb", "lib/whois/record/parser/whois.nic-se.se.rb", "lib/whois/record/parser/whois.nic.ac.rb", "lib/whois/record/parser/whois.nic.af.rb", "lib/whois/record/parser/whois.nic.ag.rb", "lib/whois/record/parser/whois.nic.am.rb", "lib/whois/record/parser/whois.nic.as.rb", "lib/whois/record/parser/whois.nic.asia.rb", "lib/whois/record/parser/whois.nic.at.rb", "lib/whois/record/parser/whois.nic.bo.rb", "lib/whois/record/parser/whois.nic.cc.rb", "lib/whois/record/parser/whois.nic.cd.rb", "lib/whois/record/parser/whois.nic.ch.rb", "lib/whois/record/parser/whois.nic.ci.rb", "lib/whois/record/parser/whois.nic.ck.rb", "lib/whois/record/parser/whois.nic.cl.rb", "lib/whois/record/parser/whois.nic.co.rb", "lib/whois/record/parser/whois.nic.coop.rb", "lib/whois/record/parser/whois.nic.cx.rb", "lib/whois/record/parser/whois.nic.cz.rb", "lib/whois/record/parser/whois.nic.dm.rb", "lib/whois/record/parser/whois.nic.dz.rb", "lib/whois/record/parser/whois.nic.ec.rb", "lib/whois/record/parser/whois.nic.fo.rb", "lib/whois/record/parser/whois.nic.fr.rb", "lib/whois/record/parser/whois.nic.gl.rb", "lib/whois/record/parser/whois.nic.gov.rb", "lib/whois/record/parser/whois.nic.gs.rb", "lib/whois/record/parser/whois.nic.hn.rb", "lib/whois/record/parser/whois.nic.ht.rb", "lib/whois/record/parser/whois.nic.hu.rb", "lib/whois/record/parser/whois.nic.im.rb", "lib/whois/record/parser/whois.nic.io.rb", "lib/whois/record/parser/whois.nic.ir.rb", "lib/whois/record/parser/whois.nic.it.rb", "lib/whois/record/parser/whois.nic.ki.rb", "lib/whois/record/parser/whois.nic.kz.rb", "lib/whois/record/parser/whois.nic.la.rb", "lib/whois/record/parser/whois.nic.li.rb", "lib/whois/record/parser/whois.nic.lk.rb", "lib/whois/record/parser/whois.nic.lv.rb", "lib/whois/record/parser/whois.nic.ly.rb", "lib/whois/record/parser/whois.nic.md.rb", "lib/whois/record/parser/whois.nic.mg.rb", "lib/whois/record/parser/whois.nic.ms.rb", "lib/whois/record/parser/whois.nic.mu.rb", "lib/whois/record/parser/whois.nic.mx.rb", "lib/whois/record/parser/whois.nic.name.rb", "lib/whois/record/parser/whois.nic.net.nf.rb", "lib/whois/record/parser/whois.nic.net.ng.rb", "lib/whois/record/parser/whois.nic.net.sa.rb", "lib/whois/record/parser/whois.nic.net.sb.rb", "lib/whois/record/parser/whois.nic.nu.rb", "lib/whois/record/parser/whois.nic.org.uy.rb", "lib/whois/record/parser/whois.nic.pr.rb", "lib/whois/record/parser/whois.nic.priv.at.rb", "lib/whois/record/parser/whois.nic.pw.rb", "lib/whois/record/parser/whois.nic.sh.rb", "lib/whois/record/parser/whois.nic.sl.rb", "lib/whois/record/parser/whois.nic.sm.rb", "lib/whois/record/parser/whois.nic.sn.rb", "lib/whois/record/parser/whois.nic.so.rb", "lib/whois/record/parser/whois.nic.st.rb", "lib/whois/record/parser/whois.nic.tel.rb", "lib/whois/record/parser/whois.nic.tl.rb", "lib/whois/record/parser/whois.nic.tm.rb", "lib/whois/record/parser/whois.nic.tr.rb", "lib/whois/record/parser/whois.nic.travel.rb", "lib/whois/record/parser/whois.nic.tv.rb", "lib/whois/record/parser/whois.nic.uk.rb", "lib/whois/record/parser/whois.nic.us.rb", "lib/whois/record/parser/whois.nic.ve.rb", "lib/whois/record/parser/whois.nic.xxx.rb", "lib/whois/record/parser/whois.norid.no.rb", "lib/whois/record/parser/whois.org.za.rb", "lib/whois/record/parser/whois.pandi.or.id.rb", "lib/whois/record/parser/whois.pir.org.rb", "lib/whois/record/parser/whois.pnina.ps.rb", "lib/whois/record/parser/whois.register.bg.rb", "lib/whois/record/parser/whois.register.com.rb", "lib/whois/record/parser/whois.registro.br.rb", "lib/whois/record/parser/whois.registry.gy.rb", "lib/whois/record/parser/whois.registry.hm.rb", "lib/whois/record/parser/whois.registry.in.rb", "lib/whois/record/parser/whois.registry.net.za.rb", "lib/whois/record/parser/whois.registry.om.rb", "lib/whois/record/parser/whois.registry.qa.rb", "lib/whois/record/parser/whois.registrypro.pro.rb", "lib/whois/record/parser/whois.ripe.net.rb", "lib/whois/record/parser/whois.rnids.rs.rb", "lib/whois/record/parser/whois.rotld.ro.rb", "lib/whois/record/parser/whois.samoanic.ws.rb", "lib/whois/record/parser/whois.sgnic.sg.rb", "lib/whois/record/parser/whois.sk-nic.sk.rb", "lib/whois/record/parser/whois.smallregistry.net.rb", "lib/whois/record/parser/whois.srs.net.nz.rb", "lib/whois/record/parser/whois.sx.rb", "lib/whois/record/parser/whois.tcinet.ru.rb", "lib/whois/record/parser/whois.thnic.co.th.rb", "lib/whois/record/parser/whois.tld.ee.rb", "lib/whois/record/parser/whois.tld.sy.rb", "lib/whois/record/parser/whois.tonic.to.rb", "lib/whois/record/parser/whois.twnic.net.tw.rb", "lib/whois/record/parser/whois.tznic.or.tz.rb", "lib/whois/record/parser/whois.ua.rb", "lib/whois/record/parser/whois.usp.ac.fj.rb", "lib/whois/record/parser/whois.za.net.rb", "lib/whois/record/parser/whois.za.org.rb", "lib/whois/record/parser/whois1.nic.bi.rb", "lib/whois/record/parser.rb", "lib/whois/record/part.rb", "lib/whois/record/registrar.rb", "lib/whois/record/scanners/base.rb", "lib/whois/record/scanners/base_afilias.rb", "lib/whois/record/scanners/base_shared1.rb", "lib/whois/record/scanners/base_shared2.rb", "lib/whois/record/scanners/base_whoisd.rb", "lib/whois/record/scanners/iana.rb", "lib/whois/record/scanners/nodable.rb", "lib/whois/record/scanners/verisign.rb", "lib/whois/record/scanners/whois.ati.tn.rb", "lib/whois/record/scanners/whois.audns.net.au.rb", "lib/whois/record/scanners/whois.cctld.by.rb", "lib/whois/record/scanners/whois.centralnic.com.rb", "lib/whois/record/scanners/whois.cira.ca.rb", "lib/whois/record/scanners/whois.cnnic.cn.rb", "lib/whois/record/scanners/whois.denic.de.rb", "lib/whois/record/scanners/whois.dns.hr.rb", "lib/whois/record/scanners/whois.domainregistry.ie.rb", "lib/whois/record/scanners/whois.nc.rb", "lib/whois/record/scanners/whois.nic.dm.rb", "lib/whois/record/scanners/whois.nic.hu.rb", "lib/whois/record/scanners/whois.nic.it.rb", "lib/whois/record/scanners/whois.registry.net.za.rb", "lib/whois/record/scanners/whois.rnids.rs.rb", "lib/whois/record/scanners/whois.smallregistry.net.rb", "lib/whois/record/scanners/whois.sx.rb", "lib/whois/record/super_struct.rb", "lib/whois/record.rb", "lib/whois/server/adapters/afilias.rb", "lib/whois/server/adapters/arin.rb", "lib/whois/server/adapters/arpa.rb", "lib/whois/server/adapters/base.rb", "lib/whois/server/adapters/formatted.rb", "lib/whois/server/adapters/none.rb", "lib/whois/server/adapters/not_implemented.rb", "lib/whois/server/adapters/standard.rb", "lib/whois/server/adapters/verisign.rb", "lib/whois/server/adapters/web.rb", "lib/whois/server/socket_handler.rb", "lib/whois/server.rb", "lib/whois/version.rb", "lib/whois.rb"]
13
+ s.files = ["LICENSE.txt", ".yardopts", "CHANGELOG.md", "README.md", "whois.gemspec", "bin/ruby-whois", "data/ipv4.json", "data/ipv6.json", "data/tld.json", "lib/whois", "lib/whois/client.rb", "lib/whois/core_ext", "lib/whois/core_ext/array", "lib/whois/core_ext/array/extract_options.rb", "lib/whois/core_ext/array/wrap.rb", "lib/whois/core_ext/class", "lib/whois/core_ext/class/attribute.rb", "lib/whois/core_ext/kernel", "lib/whois/core_ext/kernel/singleton_class.rb", "lib/whois/core_ext/module", "lib/whois/core_ext/module/remove_method.rb", "lib/whois/core_ext.rb", "lib/whois/errors.rb", "lib/whois/record", "lib/whois/record/contact.rb", "lib/whois/record/nameserver.rb", "lib/whois/record/parser", "lib/whois/record/parser/base.rb", "lib/whois/record/parser/base_afilias.rb", "lib/whois/record/parser/base_cocca.rb", "lib/whois/record/parser/base_cocca2.rb", "lib/whois/record/parser/base_shared1.rb", "lib/whois/record/parser/base_shared2.rb", "lib/whois/record/parser/base_shared3.rb", "lib/whois/record/parser/base_whoisd.rb", "lib/whois/record/parser/blank.rb", "lib/whois/record/parser/example.rb", "lib/whois/record/parser/jobswhois.verisign-grs.com.rb", "lib/whois/record/parser/kero.yachay.pe.rb", "lib/whois/record/parser/NOTES.txt", "lib/whois/record/parser/whois.adamsnames.tc.rb", "lib/whois/record/parser/whois.aeda.net.ae.rb", "lib/whois/record/parser/whois.aero.rb", "lib/whois/record/parser/whois.afilias-grs.info.rb", "lib/whois/record/parser/whois.afilias.info.rb", "lib/whois/record/parser/whois.ai.rb", "lib/whois/record/parser/whois.arnes.si.rb", "lib/whois/record/parser/whois.ati.tn.rb", "lib/whois/record/parser/whois.audns.net.au.rb", "lib/whois/record/parser/whois.ax.rb", "lib/whois/record/parser/whois.biz.rb", "lib/whois/record/parser/whois.bn.rb", "lib/whois/record/parser/whois.cat.rb", "lib/whois/record/parser/whois.cctld.by.rb", "lib/whois/record/parser/whois.cctld.uz.rb", "lib/whois/record/parser/whois.centralnic.com.rb", "lib/whois/record/parser/whois.cira.ca.rb", "lib/whois/record/parser/whois.cmc.iq.rb", "lib/whois/record/parser/whois.cnnic.cn.rb", "lib/whois/record/parser/whois.co.ca.rb", "lib/whois/record/parser/whois.co.pl.rb", "lib/whois/record/parser/whois.co.ug.rb", "lib/whois/record/parser/whois.comlaude.com.rb", "lib/whois/record/parser/whois.crsnic.net.rb", "lib/whois/record/parser/whois.denic.de.rb", "lib/whois/record/parser/whois.dk-hostmaster.dk.rb", "lib/whois/record/parser/whois.dns.be.rb", "lib/whois/record/parser/whois.dns.hr.rb", "lib/whois/record/parser/whois.dns.lu.rb", "lib/whois/record/parser/whois.dns.pl.rb", "lib/whois/record/parser/whois.dns.pt.rb", "lib/whois/record/parser/whois.domain-registry.nl.rb", "lib/whois/record/parser/whois.domain.kg.rb", "lib/whois/record/parser/whois.domainregistry.ie.rb", "lib/whois/record/parser/whois.domainregistry.my.rb", "lib/whois/record/parser/whois.domreg.lt.rb", "lib/whois/record/parser/whois.dot.tk.rb", "lib/whois/record/parser/whois.dotmobiregistry.net.rb", "lib/whois/record/parser/whois.dotpostregistry.net.rb", "lib/whois/record/parser/whois.dreamhost.com.rb", "lib/whois/record/parser/whois.educause.edu.rb", "lib/whois/record/parser/whois.eenet.ee.rb", "lib/whois/record/parser/whois.enom.com.rb", "lib/whois/record/parser/whois.eu.org.rb", "lib/whois/record/parser/whois.eu.rb", "lib/whois/record/parser/whois.fi.rb", "lib/whois/record/parser/whois.gg.rb", "lib/whois/record/parser/whois.godaddy.com.rb", "lib/whois/record/parser/whois.gov.za.rb", "lib/whois/record/parser/whois.hkirc.hk.rb", "lib/whois/record/parser/whois.iam.net.ma.rb", "lib/whois/record/parser/whois.iana.org.rb", "lib/whois/record/parser/whois.in.ua.rb", "lib/whois/record/parser/whois.isnic.is.rb", "lib/whois/record/parser/whois.isoc.org.il.rb", "lib/whois/record/parser/whois.ja.net.rb", "lib/whois/record/parser/whois.je.rb", "lib/whois/record/parser/whois.jprs.jp.rb", "lib/whois/record/parser/whois.kenic.or.ke.rb", "lib/whois/record/parser/whois.kr.rb", "lib/whois/record/parser/whois.markmonitor.com.rb", "lib/whois/record/parser/whois.meregistry.net.rb", "lib/whois/record/parser/whois.meridiantld.net.rb", "lib/whois/record/parser/whois.monic.mo.rb", "lib/whois/record/parser/whois.museum.rb", "lib/whois/record/parser/whois.na-nic.com.na.rb", "lib/whois/record/parser/whois.nc.rb", "lib/whois/record/parser/whois.netcom.cm.rb", "lib/whois/record/parser/whois.networksolutions.com.rb", "lib/whois/record/parser/whois.nic-se.se.rb", "lib/whois/record/parser/whois.nic.ac.rb", "lib/whois/record/parser/whois.nic.af.rb", "lib/whois/record/parser/whois.nic.ag.rb", "lib/whois/record/parser/whois.nic.am.rb", "lib/whois/record/parser/whois.nic.as.rb", "lib/whois/record/parser/whois.nic.asia.rb", "lib/whois/record/parser/whois.nic.at.rb", "lib/whois/record/parser/whois.nic.bo.rb", "lib/whois/record/parser/whois.nic.cc.rb", "lib/whois/record/parser/whois.nic.cd.rb", "lib/whois/record/parser/whois.nic.ch.rb", "lib/whois/record/parser/whois.nic.ci.rb", "lib/whois/record/parser/whois.nic.ck.rb", "lib/whois/record/parser/whois.nic.cl.rb", "lib/whois/record/parser/whois.nic.co.rb", "lib/whois/record/parser/whois.nic.coop.rb", "lib/whois/record/parser/whois.nic.cx.rb", "lib/whois/record/parser/whois.nic.cz.rb", "lib/whois/record/parser/whois.nic.dm.rb", "lib/whois/record/parser/whois.nic.dz.rb", "lib/whois/record/parser/whois.nic.ec.rb", "lib/whois/record/parser/whois.nic.fo.rb", "lib/whois/record/parser/whois.nic.fr.rb", "lib/whois/record/parser/whois.nic.gd.rb", "lib/whois/record/parser/whois.nic.gl.rb", "lib/whois/record/parser/whois.nic.gov.rb", "lib/whois/record/parser/whois.nic.gs.rb", "lib/whois/record/parser/whois.nic.hn.rb", "lib/whois/record/parser/whois.nic.ht.rb", "lib/whois/record/parser/whois.nic.hu.rb", "lib/whois/record/parser/whois.nic.im.rb", "lib/whois/record/parser/whois.nic.io.rb", "lib/whois/record/parser/whois.nic.ir.rb", "lib/whois/record/parser/whois.nic.it.rb", "lib/whois/record/parser/whois.nic.ki.rb", "lib/whois/record/parser/whois.nic.kz.rb", "lib/whois/record/parser/whois.nic.la.rb", "lib/whois/record/parser/whois.nic.li.rb", "lib/whois/record/parser/whois.nic.lk.rb", "lib/whois/record/parser/whois.nic.lv.rb", "lib/whois/record/parser/whois.nic.ly.rb", "lib/whois/record/parser/whois.nic.md.rb", "lib/whois/record/parser/whois.nic.mg.rb", "lib/whois/record/parser/whois.nic.ms.rb", "lib/whois/record/parser/whois.nic.mu.rb", "lib/whois/record/parser/whois.nic.mx.rb", "lib/whois/record/parser/whois.nic.name.rb", "lib/whois/record/parser/whois.nic.net.nf.rb", "lib/whois/record/parser/whois.nic.net.ng.rb", "lib/whois/record/parser/whois.nic.net.sa.rb", "lib/whois/record/parser/whois.nic.net.sb.rb", "lib/whois/record/parser/whois.nic.nu.rb", "lib/whois/record/parser/whois.nic.org.uy.rb", "lib/whois/record/parser/whois.nic.pr.rb", "lib/whois/record/parser/whois.nic.priv.at.rb", "lib/whois/record/parser/whois.nic.pw.rb", "lib/whois/record/parser/whois.nic.sh.rb", "lib/whois/record/parser/whois.nic.sl.rb", "lib/whois/record/parser/whois.nic.sm.rb", "lib/whois/record/parser/whois.nic.sn.rb", "lib/whois/record/parser/whois.nic.so.rb", "lib/whois/record/parser/whois.nic.st.rb", "lib/whois/record/parser/whois.nic.tel.rb", "lib/whois/record/parser/whois.nic.tl.rb", "lib/whois/record/parser/whois.nic.tm.rb", "lib/whois/record/parser/whois.nic.tr.rb", "lib/whois/record/parser/whois.nic.travel.rb", "lib/whois/record/parser/whois.nic.tv.rb", "lib/whois/record/parser/whois.nic.uk.rb", "lib/whois/record/parser/whois.nic.us.rb", "lib/whois/record/parser/whois.nic.ve.rb", "lib/whois/record/parser/whois.nic.xxx.rb", "lib/whois/record/parser/whois.norid.no.rb", "lib/whois/record/parser/whois.org.za.rb", "lib/whois/record/parser/whois.pandi.or.id.rb", "lib/whois/record/parser/whois.pir.org.rb", "lib/whois/record/parser/whois.pnina.ps.rb", "lib/whois/record/parser/whois.register.bg.rb", "lib/whois/record/parser/whois.register.com.rb", "lib/whois/record/parser/whois.registro.br.rb", "lib/whois/record/parser/whois.registry.gy.rb", "lib/whois/record/parser/whois.registry.hm.rb", "lib/whois/record/parser/whois.registry.in.rb", "lib/whois/record/parser/whois.registry.net.za.rb", "lib/whois/record/parser/whois.registry.om.rb", "lib/whois/record/parser/whois.registry.qa.rb", "lib/whois/record/parser/whois.registrypro.pro.rb", "lib/whois/record/parser/whois.ripe.net.rb", "lib/whois/record/parser/whois.rnids.rs.rb", "lib/whois/record/parser/whois.rotld.ro.rb", "lib/whois/record/parser/whois.samoanic.ws.rb", "lib/whois/record/parser/whois.sgnic.sg.rb", "lib/whois/record/parser/whois.sk-nic.sk.rb", "lib/whois/record/parser/whois.smallregistry.net.rb", "lib/whois/record/parser/whois.srs.net.nz.rb", "lib/whois/record/parser/whois.sx.rb", "lib/whois/record/parser/whois.tcinet.ru.rb", "lib/whois/record/parser/whois.thnic.co.th.rb", "lib/whois/record/parser/whois.tld.ee.rb", "lib/whois/record/parser/whois.tld.sy.rb", "lib/whois/record/parser/whois.tonic.to.rb", "lib/whois/record/parser/whois.twnic.net.tw.rb", "lib/whois/record/parser/whois.tznic.or.tz.rb", "lib/whois/record/parser/whois.ua.rb", "lib/whois/record/parser/whois.usp.ac.fj.rb", "lib/whois/record/parser/whois.za.net.rb", "lib/whois/record/parser/whois.za.org.rb", "lib/whois/record/parser/whois1.nic.bi.rb", "lib/whois/record/parser.rb", "lib/whois/record/part.rb", "lib/whois/record/registrar.rb", "lib/whois/record/scanners", "lib/whois/record/scanners/base.rb", "lib/whois/record/scanners/base_afilias.rb", "lib/whois/record/scanners/base_shared1.rb", "lib/whois/record/scanners/base_shared2.rb", "lib/whois/record/scanners/base_shared3.rb", "lib/whois/record/scanners/base_whoisd.rb", "lib/whois/record/scanners/iana.rb", "lib/whois/record/scanners/nodable.rb", "lib/whois/record/scanners/verisign.rb", "lib/whois/record/scanners/whois.ati.tn.rb", "lib/whois/record/scanners/whois.audns.net.au.rb", "lib/whois/record/scanners/whois.cctld.by.rb", "lib/whois/record/scanners/whois.centralnic.com.rb", "lib/whois/record/scanners/whois.cira.ca.rb", "lib/whois/record/scanners/whois.cnnic.cn.rb", "lib/whois/record/scanners/whois.denic.de.rb", "lib/whois/record/scanners/whois.dns.hr.rb", "lib/whois/record/scanners/whois.domainregistry.ie.rb", "lib/whois/record/scanners/whois.nc.rb", "lib/whois/record/scanners/whois.nic.hu.rb", "lib/whois/record/scanners/whois.nic.it.rb", "lib/whois/record/scanners/whois.registry.net.za.rb", "lib/whois/record/scanners/whois.rnids.rs.rb", "lib/whois/record/scanners/whois.smallregistry.net.rb", "lib/whois/record/scanners/whois.sx.rb", "lib/whois/record/super_struct.rb", "lib/whois/record.rb", "lib/whois/server", "lib/whois/server/adapters", "lib/whois/server/adapters/afilias.rb", "lib/whois/server/adapters/arin.rb", "lib/whois/server/adapters/arpa.rb", "lib/whois/server/adapters/base.rb", "lib/whois/server/adapters/formatted.rb", "lib/whois/server/adapters/none.rb", "lib/whois/server/adapters/not_implemented.rb", "lib/whois/server/adapters/standard.rb", "lib/whois/server/adapters/verisign.rb", "lib/whois/server/adapters/web.rb", "lib/whois/server/socket_handler.rb", "lib/whois/server.rb", "lib/whois/version.rb", "lib/whois.rb"]
14
14
  s.homepage = "http://www.ruby-whois.org/"
15
15
  s.post_install_message = "********************************************************************************\n\n Thank you for installing the whois gem!\n\n If you like this gem, please support the project.\n http://pledgie.com/campaigns/11383\n\n Does your project or organization use this gem? Add it to the apps wiki.\n https://github.com/weppos/whois/wiki/apps\n\n Are you looking for a quick and convenient way to perform WHOIS queries?\n Check out RoboWhois WHOIS API.\n https://www.robowhois.com/\n\n********************************************************************************\n"
16
16
  s.require_paths = ["lib"]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whois
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.2
4
+ version: 3.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simone Carletti
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-06 00:00:00.000000000 Z
11
+ date: 2013-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -101,6 +101,7 @@ files:
101
101
  - lib/whois/record/parser/base_cocca2.rb
102
102
  - lib/whois/record/parser/base_shared1.rb
103
103
  - lib/whois/record/parser/base_shared2.rb
104
+ - lib/whois/record/parser/base_shared3.rb
104
105
  - lib/whois/record/parser/base_whoisd.rb
105
106
  - lib/whois/record/parser/blank.rb
106
107
  - lib/whois/record/parser/example.rb
@@ -169,6 +170,7 @@ files:
169
170
  - lib/whois/record/parser/whois.kr.rb
170
171
  - lib/whois/record/parser/whois.markmonitor.com.rb
171
172
  - lib/whois/record/parser/whois.meregistry.net.rb
173
+ - lib/whois/record/parser/whois.meridiantld.net.rb
172
174
  - lib/whois/record/parser/whois.monic.mo.rb
173
175
  - lib/whois/record/parser/whois.museum.rb
174
176
  - lib/whois/record/parser/whois.na-nic.com.na.rb
@@ -199,6 +201,7 @@ files:
199
201
  - lib/whois/record/parser/whois.nic.ec.rb
200
202
  - lib/whois/record/parser/whois.nic.fo.rb
201
203
  - lib/whois/record/parser/whois.nic.fr.rb
204
+ - lib/whois/record/parser/whois.nic.gd.rb
202
205
  - lib/whois/record/parser/whois.nic.gl.rb
203
206
  - lib/whois/record/parser/whois.nic.gov.rb
204
207
  - lib/whois/record/parser/whois.nic.gs.rb
@@ -290,6 +293,7 @@ files:
290
293
  - lib/whois/record/scanners/base_afilias.rb
291
294
  - lib/whois/record/scanners/base_shared1.rb
292
295
  - lib/whois/record/scanners/base_shared2.rb
296
+ - lib/whois/record/scanners/base_shared3.rb
293
297
  - lib/whois/record/scanners/base_whoisd.rb
294
298
  - lib/whois/record/scanners/iana.rb
295
299
  - lib/whois/record/scanners/nodable.rb
@@ -304,7 +308,6 @@ files:
304
308
  - lib/whois/record/scanners/whois.dns.hr.rb
305
309
  - lib/whois/record/scanners/whois.domainregistry.ie.rb
306
310
  - lib/whois/record/scanners/whois.nc.rb
307
- - lib/whois/record/scanners/whois.nic.dm.rb
308
311
  - lib/whois/record/scanners/whois.nic.hu.rb
309
312
  - lib/whois/record/scanners/whois.nic.it.rb
310
313
  - lib/whois/record/scanners/whois.registry.net.za.rb