whois 5.0.1 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +26 -0
  3. data/.rubocop_opinionated.yml +157 -0
  4. data/.rubocop_todo.yml +242 -0
  5. data/.simplecov +2 -0
  6. data/.tool-versions +1 -0
  7. data/CHANGELOG.md +68 -53
  8. data/Gemfile +5 -0
  9. data/LICENSE.txt +1 -1
  10. data/README.md +1 -1
  11. data/Rakefile +12 -17
  12. data/bin/console +1 -0
  13. data/bin/whoisrb +3 -2
  14. data/data/ipv4.json +1 -3
  15. data/data/tld.json +2 -90
  16. data/lib/whois.rb +12 -10
  17. data/lib/whois/client.rb +4 -2
  18. data/lib/whois/errors.rb +4 -2
  19. data/lib/whois/record.rb +3 -1
  20. data/lib/whois/record/part.rb +4 -3
  21. data/lib/whois/server.rb +26 -21
  22. data/lib/whois/server/adapters/afilias.rb +4 -1
  23. data/lib/whois/server/adapters/arin.rb +5 -2
  24. data/lib/whois/server/adapters/arpa.rb +22 -19
  25. data/lib/whois/server/adapters/base.rb +4 -4
  26. data/lib/whois/server/adapters/formatted.rb +4 -2
  27. data/lib/whois/server/adapters/none.rb +3 -1
  28. data/lib/whois/server/adapters/not_implemented.rb +3 -1
  29. data/lib/whois/server/adapters/standard.rb +4 -2
  30. data/lib/whois/server/adapters/verisign.rb +4 -1
  31. data/lib/whois/server/adapters/web.rb +3 -1
  32. data/lib/whois/server/socket_handler.rb +8 -6
  33. data/lib/whois/version.rb +4 -2
  34. data/spec/integration/whois_spec.rb +6 -6
  35. data/spec/spec_helper.rb +4 -2
  36. data/spec/support/helpers/connectivity_helper.rb +2 -0
  37. data/spec/support/helpers/spec_helper.rb +2 -0
  38. data/spec/whois/client_spec.rb +6 -7
  39. data/spec/whois/record/part_spec.rb +4 -4
  40. data/spec/whois/record_spec.rb +9 -7
  41. data/spec/whois/server/adapters/afilias_spec.rb +3 -3
  42. data/spec/whois/server/adapters/arin_spec.rb +7 -8
  43. data/spec/whois/server/adapters/arpa_spec.rb +2 -2
  44. data/spec/whois/server/adapters/base_spec.rb +13 -13
  45. data/spec/whois/server/adapters/formatted_spec.rb +7 -7
  46. data/spec/whois/server/adapters/none_spec.rb +2 -2
  47. data/spec/whois/server/adapters/not_implemented_spec.rb +3 -3
  48. data/spec/whois/server/adapters/standard_spec.rb +5 -5
  49. data/spec/whois/server/adapters/verisign_spec.rb +3 -3
  50. data/spec/whois/server/adapters/web_spec.rb +3 -3
  51. data/spec/whois/server/socket_handler_spec.rb +7 -5
  52. data/spec/whois/server_spec.rb +31 -29
  53. data/spec/whois/{errors_spec.rb → web_interface_error_spec.rb} +4 -4
  54. data/spec/whois/whois_spec.rb +3 -3
  55. metadata +11 -8
  56. data/tasks/spec.rake +0 -199
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
4
  # Ruby Whois
3
5
  #
4
6
  # An intelligent pure Ruby WHOIS client and parser.
5
7
  #
6
- # Copyright (c) 2009-2020 Simone Carletti <weppos@weppos.net>
8
+ # Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
7
9
  #++
8
10
 
9
11
 
@@ -40,6 +42,7 @@ module Whois
40
42
 
41
43
  def extract_referral(response)
42
44
  return unless (match = response.match(/Registrar WHOIS Server:(.+?)$/))
45
+
43
46
  server = match[match.size - 1].strip
44
47
  server.empty? ? nil : server
45
48
  end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
4
  # Ruby Whois
3
5
  #
4
6
  # An intelligent pure Ruby WHOIS client and parser.
5
7
  #
6
- # Copyright (c) 2009-2020 Simone Carletti <weppos@weppos.net>
8
+ # Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
7
9
  #++
8
10
 
9
11
 
@@ -39,9 +41,10 @@ module Whois
39
41
 
40
42
  def extract_referral(response)
41
43
  return unless response =~ /ReferralServer:\s*r?whois:\/\/([\w.-]+)(?::(\d+))?/
44
+
42
45
  {
43
46
  host: $1,
44
- port: $2 ? $2.to_i : nil
47
+ port: $2 ? $2.to_i : nil,
45
48
  }
46
49
  end
47
50
 
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
4
  # Ruby Whois
3
5
  #
4
6
  # An intelligent pure Ruby WHOIS client and parser.
5
7
  #
6
- # Copyright (c) 2009-2020 Simone Carletti <weppos@weppos.net>
8
+ # Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
7
9
  #++
8
10
 
9
11
 
@@ -22,26 +24,27 @@ module Whois
22
24
 
23
25
  private
24
26
 
25
- # "127.1.168.192.in-addr.arpa" => "192.168.1.127"
26
- # "1.168.192.in-addr.arpa" => "192.168.1.0"
27
- # "168.192.in-addr.arpa" => "192.168.0.0"
28
- # "192.in-addr.arpa" => "192.0.0.0"
29
- # "in-addr.arpa" => "0.0.0.0"
30
- def inaddr_to_ip(string)
31
- unless string.match?(/^([0-9]{1,3}\.?){0,4}in-addr\.arpa$/)
32
- raise ServerError, "Invalid .in-addr.arpa address"
33
- end
34
- a, b, c, d = string.scan(/[0-9]{1,3}\./).reverse
35
- [a, b, c, d].map do |token|
36
- token = (token ||= 0).to_i
37
- if token <= 255 && token >= 0
38
- token
39
- else
40
- raise ServerError, "Invalid .in-addr.arpa token `#{token}'"
41
- end
42
- end.join(".")
27
+ # "127.1.168.192.in-addr.arpa" => "192.168.1.127"
28
+ # "1.168.192.in-addr.arpa" => "192.168.1.0"
29
+ # "168.192.in-addr.arpa" => "192.168.0.0"
30
+ # "192.in-addr.arpa" => "192.0.0.0"
31
+ # "in-addr.arpa" => "0.0.0.0"
32
+ def inaddr_to_ip(string)
33
+ unless string.match?(/^([0-9]{1,3}\.?){0,4}in-addr\.arpa$/)
34
+ raise ServerError, "Invalid .in-addr.arpa address"
43
35
  end
44
36
 
37
+ a, b, c, d = string.scan(/[0-9]{1,3}\./).reverse
38
+ [a, b, c, d].map do |token|
39
+ token = (token || 0).to_i
40
+ if token <= 255 && token >= 0
41
+ token
42
+ else
43
+ raise ServerError, "Invalid .in-addr.arpa token `#{token}'"
44
+ end
45
+ end.join(".")
46
+ end
47
+
45
48
  end
46
49
 
47
50
  end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
4
  # Ruby Whois
3
5
  #
4
6
  # An intelligent pure Ruby WHOIS client and parser.
5
7
  #
6
- # Copyright (c) 2009-2020 Simone Carletti <weppos@weppos.net>
8
+ # Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
7
9
  #++
8
10
 
9
11
 
@@ -22,9 +24,7 @@ module Whois
22
24
  @query_handler ||= SocketHandler.new
23
25
  end
24
26
 
25
- def query_handler=(handler)
26
- @query_handler = handler
27
- end
27
+ attr_writer :query_handler
28
28
  end
29
29
 
30
30
  # Default WHOIS request port.
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
4
  # Ruby Whois
3
5
  #
4
6
  # An intelligent pure Ruby WHOIS client and parser.
5
7
  #
6
- # Copyright (c) 2009-2020 Simone Carletti <weppos@weppos.net>
8
+ # Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
7
9
  #++
8
10
 
9
11
 
@@ -47,7 +49,7 @@ module Whois
47
49
  #
48
50
  def request(string)
49
51
  options[:format] || raise(ServerError, "Missing mandatory :format option for adapter `Formatted'")
50
- response = query_the_socket(sprintf(options[:format], string), host)
52
+ response = query_the_socket(format(options[:format], string), host)
51
53
  buffer_append response, host
52
54
  end
53
55
 
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
4
  # Ruby Whois
3
5
  #
4
6
  # An intelligent pure Ruby WHOIS client and parser.
5
7
  #
6
- # Copyright (c) 2009-2020 Simone Carletti <weppos@weppos.net>
8
+ # Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
7
9
  #++
8
10
 
9
11
 
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
4
  # Ruby Whois
3
5
  #
4
6
  # An intelligent pure Ruby WHOIS client and parser.
5
7
  #
6
- # Copyright (c) 2009-2020 Simone Carletti <weppos@weppos.net>
8
+ # Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
7
9
  #++
8
10
 
9
11
 
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
4
  # Ruby Whois
3
5
  #
4
6
  # An intelligent pure Ruby WHOIS client and parser.
5
7
  #
6
- # Copyright (c) 2009-2020 Simone Carletti <weppos@weppos.net>
8
+ # Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
7
9
  #++
8
10
 
9
11
 
@@ -56,4 +58,4 @@ module Whois
56
58
 
57
59
  end
58
60
  end
59
- end
61
+ end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
4
  # Ruby Whois
3
5
  #
4
6
  # An intelligent pure Ruby WHOIS client and parser.
5
7
  #
6
- # Copyright (c) 2009-2020 Simone Carletti <weppos@weppos.net>
8
+ # Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
7
9
  #++
8
10
 
9
11
 
@@ -40,6 +42,7 @@ module Whois
40
42
 
41
43
  def extract_referral(response)
42
44
  return unless (match = response.match(/Registrar WHOIS Server:(.+?)$/))
45
+
43
46
  server = match[match.size - 1].strip
44
47
  server.empty? ? nil : server
45
48
  end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
4
  # Ruby Whois
3
5
  #
4
6
  # An intelligent pure Ruby WHOIS client and parser.
5
7
  #
6
- # Copyright (c) 2009-2020 Simone Carletti <weppos@weppos.net>
8
+ # Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
7
9
  #++
8
10
 
9
11
 
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
4
  # Ruby Whois
3
5
  #
4
6
  # An intelligent pure Ruby WHOIS client and parser.
5
7
  #
6
- # Copyright (c) 2009-2020 Simone Carletti <weppos@weppos.net>
8
+ # Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
7
9
  #++
8
10
 
9
11
 
@@ -22,9 +24,9 @@ module Whois
22
24
  # Array of connection errors to rescue
23
25
  # and wrap into a {Whois::ConnectionError}
24
26
  RESCUABLE_CONNECTION_ERRORS = [
25
- SystemCallError,
26
- SocketError,
27
- ]
27
+ SystemCallError,
28
+ SocketError,
29
+ ].freeze
28
30
 
29
31
  # Performs the Socket request.
30
32
  #
@@ -36,8 +38,8 @@ module Whois
36
38
  #
37
39
  def call(query, *args)
38
40
  execute(query, *args)
39
- rescue *RESCUABLE_CONNECTION_ERRORS => error
40
- raise ConnectionError, "#{error.class}: #{error.message}"
41
+ rescue *RESCUABLE_CONNECTION_ERRORS => e
42
+ raise ConnectionError, "#{e.class}: #{e.message}"
41
43
  end
42
44
 
43
45
  # Executes the low-level Socket connection.
data/lib/whois/version.rb CHANGED
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
4
  # Ruby Whois
3
5
  #
4
6
  # An intelligent pure Ruby WHOIS client and parser.
5
7
  #
6
- # Copyright (c) 2009-2020 Simone Carletti <weppos@weppos.net>
8
+ # Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
7
9
  #++
8
10
 
9
11
 
10
12
  module Whois
11
13
  # The current library version.
12
- VERSION = "5.0.1".freeze
14
+ VERSION = "5.0.2"
13
15
  end
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Whois do
4
-
5
- let(:response) { "Domain: example.it\nStatus: AVAILABLE\n" }
6
+ let(:response) { "Domain: example.it\nStatus: AVAILABLE\n" }
6
7
 
7
8
  describe "Basic WHOIS querying and parsing" do
8
9
  it "works" do
@@ -32,7 +33,7 @@ describe Whois do
32
33
  .with("example.it", "whois.nic.it", 43, "192.168.1.1", 3000)
33
34
  .and_return(response)
34
35
 
35
- client = Whois::Client.new(:bind_host => "192.168.1.1", :bind_port => 3000)
36
+ client = Whois::Client.new(bind_host: "192.168.1.1", bind_port: 3000)
36
37
  client.lookup("example.it")
37
38
  end
38
39
  end
@@ -46,7 +47,7 @@ describe Whois do
46
47
  .with("example.it", "whois.nic.it", 43, Whois::Server::Adapters::Base::DEFAULT_BIND_HOST, 3000)
47
48
  .and_return(response)
48
49
 
49
- client = Whois::Client.new(:bind_port => 3000)
50
+ client = Whois::Client.new(bind_port: 3000)
50
51
  client.lookup("example.it")
51
52
  end
52
53
  end
@@ -60,7 +61,7 @@ describe Whois do
60
61
  .with("example.it", "whois.example.com", 43)
61
62
  .and_return(response)
62
63
 
63
- client = Whois::Client.new(:host => "whois.example.com")
64
+ client = Whois::Client.new(host: "whois.example.com")
64
65
  record = client.lookup("example.it")
65
66
 
66
67
  expect(record.parts.size).to eq(1)
@@ -69,5 +70,4 @@ describe Whois do
69
70
  end
70
71
  end
71
72
  end
72
-
73
73
  end
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rspec'
2
4
  require 'whois'
3
5
 
4
6
  unless defined?(SPEC_ROOT)
5
- SPEC_ROOT = File.expand_path("../", __FILE__)
7
+ SPEC_ROOT = File.expand_path(__dir__)
6
8
  end
7
9
 
8
10
  # The fixtures are UTF-8 encoded.
@@ -12,7 +14,7 @@ Encoding.default_internal = Encoding::UTF_8
12
14
 
13
15
  # Requires supporting ruby files with custom matchers and macros, etc,
14
16
  # in spec/support/ and its subdirectories.
15
- Dir[File.join(SPEC_ROOT, "support/**/*.rb")].each { |f| require f }
17
+ Dir[File.join(SPEC_ROOT, "support/**/*.rb")].sort.each { |f| require f }
16
18
 
17
19
  RSpec.configure do |config|
18
20
  config.mock_with :rspec
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RSpecSupportConnectivityHelpers
2
4
  def need_connectivity
3
5
  if connectivity_available?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RSpecSupportSpecHelpers
2
4
 
3
5
  def fixture(*names)
@@ -1,14 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Whois::Client do
4
-
5
6
  describe "#initialize" do
6
7
  it "accepts a zero parameters" do
7
- expect { described_class.new }.to_not raise_error
8
+ expect { described_class.new }.not_to raise_error
8
9
  end
9
10
 
10
11
  it "accepts a settings parameter" do
11
- expect { described_class.new({ foo: "bar" }) }.to_not raise_error
12
+ expect { described_class.new({ foo: "bar" }) }.not_to raise_error
12
13
  end
13
14
 
14
15
 
@@ -111,7 +112,7 @@ describe Whois::Client do
111
112
  client = described_class.new(timeout: 5)
112
113
  expect {
113
114
  client.lookup("example.test")
114
- }.to_not raise_error
115
+ }.not_to raise_error
115
116
  end
116
117
 
117
118
  it "supports unlimited timeout" do
@@ -125,9 +126,8 @@ describe Whois::Client do
125
126
  client = described_class.new.tap { |c| c.timeout = nil }
126
127
  expect {
127
128
  client.lookup("example.test")
128
- }.to_not raise_error
129
+ }.not_to raise_error
129
130
  end
130
-
131
131
  end
132
132
 
133
133
  # FIXME: use RSpec metadata
@@ -140,5 +140,4 @@ describe Whois::Client do
140
140
  end
141
141
  end
142
142
  end
143
-
144
143
  end
@@ -1,20 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Whois::Record::Part do
4
-
5
6
  describe "#initialize" do
6
7
  it "accepts an empty value" do
7
8
  expect {
8
9
  instance = described_class.new
9
10
  expect(instance.body).to be_nil
10
- }.to_not raise_error
11
+ }.not_to raise_error
11
12
  end
12
13
 
13
14
  it "accepts an empty hash" do
14
15
  expect {
15
16
  instance = described_class.new({})
16
17
  expect(instance.body).to be_nil
17
- }.to_not raise_error
18
+ }.not_to raise_error
18
19
  end
19
20
 
20
21
  it "initializes a new instance from given hash" do
@@ -34,5 +35,4 @@ describe Whois::Record::Part do
34
35
  expect(instance.host).to eq("whois.example.test")
35
36
  end
36
37
  end
37
-
38
38
  end