whois 3.1.2 → 3.1.3

Sign up to get free protection for your applications and to get access to all the features.
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