nslookupot 0.0.9 → 0.0.10

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,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a70603270c739e775d3873bcdf853f18dbfb15202627dcde9c21c93d85846241
4
- data.tar.gz: 82829d828069a267ce4d312ba18e1b65a1adb5f348dbec57bafbb4c40a2f436b
3
+ metadata.gz: 327221d555480cece10786485fe2dcdda611e1808b95a4cc4e350a666ac20fa9
4
+ data.tar.gz: 4132dc893b13642955b4cd830d73e98fadf4779ee03fd909abbf17ab83db3dc2
5
5
  SHA512:
6
- metadata.gz: 215dfe05b79bf4f5966dc3a505ec4028d4fd5776a7662e7baf145449aeb3409fe666753e95a9afafa8e6f3e1d536f8368e4915241e00081806d8604e5938ebe8
7
- data.tar.gz: 9d9cb4a0c11de2290e03758f4033b24c643284b4dc69c841a87113d2fdf1993e49aa7283f1ee827ee3b53f413512380f30b0f4253a865e647421ece81768d3b1
6
+ metadata.gz: 1bea793a0d39ffd71be4335e6fe67ae87531720ed95761134b016c87b09271de5f0231f181827fc4e3503b208b06154f84f3a700b01ac91492aa2047526588cb
7
+ data.tar.gz: c902c61d252da40c0467a32a2457ed7976617e78a7de0ac1c47ef76f493c6ae8fdb3cfa87fafad3259c5e302a2475d751385b2a4ed2e28f79a931314e3e946b3
@@ -13,7 +13,7 @@ jobs:
13
13
  runs-on: ubuntu-latest
14
14
  strategy:
15
15
  matrix:
16
- ruby-version: ['2.6.x', '2.7.x']
16
+ ruby-version: ['2.7.x', '3.0.x', '3.1.x']
17
17
  steps:
18
18
  - name: Set up Ruby
19
19
  uses: actions/setup-ruby@v1
data/.rubocop.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.6
2
+ TargetRubyVersion: 2.7
3
3
 
4
4
  Style/Documentation:
5
5
  Enabled: false
@@ -4,6 +4,7 @@ require 'optparse'
4
4
 
5
5
  module Nslookupot
6
6
  class CLI
7
+ # rubocop: disable Metrics/AbcSize
7
8
  # rubocop: disable Metrics/MethodLength
8
9
  def parse_options(argv = ARGV)
9
10
  op = OptionParser.new
@@ -62,25 +63,26 @@ module Nslookupot
62
63
  args = op.parse(argv)
63
64
  rescue OptionParser::InvalidOption => e
64
65
  warn op.to_s
65
- warn "error: #{e.message}"
66
+ warn "** #{e.message}"
66
67
  exit 1
67
68
  end
68
69
 
69
70
  begin
70
71
  type = s2typeclass(type)
71
72
  rescue NameError
72
- warn "error: unknown query type #{type}"
73
+ warn "** unknown query type: #{type.upcase}"
73
74
  exit 1
74
75
  end
75
76
 
76
77
  if args.size != 1
77
78
  warn op.to_s
78
- warn 'error: number of arguments is not 1'
79
+ warn '** `name` argument is not specified'
79
80
  exit 1
80
81
  end
81
82
 
82
83
  [opts, args[0], type]
83
84
  end
85
+ # rubocop: enable Metrics/AbcSize
84
86
  # rubocop: enable Metrics/MethodLength
85
87
 
86
88
  def s2typeclass(s)
@@ -90,21 +92,37 @@ module Nslookupot
90
92
  rr
91
93
  end
92
94
 
95
+ # rubocop: disable Metrics/AbcSize
93
96
  def run
94
97
  opts, name, type = parse_options
95
98
 
96
- resolver = Nslookupot::Resolver.new(**opts)
97
- puts 'Address:'.ljust(16) + opts[:server] + '#' + opts[:port].to_s
98
- puts '--'
99
- resolver.resolve_resources(name, type).each do |rr|
99
+ resolver = Resolver.new(**opts)
100
+ puts 'Server:'.ljust(16) + opts[:server]
101
+ puts 'Address:'.ljust(16) + "#{opts[:server]}\##{opts[:port]}"
102
+ puts
103
+
104
+ result = nil
105
+ begin
106
+ result = resolver.resolve_resources(name, type)
107
+ rescue Error::DNNotFound
108
+ t = type.name.split('::').last
109
+ warn "** Not Found: (domain, type) = (#{name}, #{t})"
110
+ exit 1
111
+ rescue Error::DoTServerUnavailable => e
112
+ warn "** DoT Server Unavailable: #{e.message}"
113
+ exit 1
114
+ end
115
+
116
+ result.each do |rr|
100
117
  puts 'Name:'.ljust(16) + name
101
118
  rr.instance_variables.each do |var|
102
- k = (var[1..].capitalize + ':').ljust(16)
119
+ k = "#{var[1..].capitalize}:".ljust(16)
103
120
  v = rr.instance_variable_get(var).to_s
104
121
  puts k + v
105
122
  end
106
- puts ''
123
+ puts
107
124
  end
108
125
  end
126
+ # rubocop: enable Metrics/AbcSize
109
127
  end
110
128
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Nslookupot
4
+ module Error
5
+ # Generic error, common for all classes under Nslookupot::Error module.
6
+ class Error < StandardError; end
7
+
8
+ class DNNotFound < Error; end
9
+
10
+ class DoTServerUnavailable < Error; end
11
+ end
12
+ end
@@ -35,14 +35,26 @@ module Nslookupot
35
35
  # @param name [String]
36
36
  # @param typeclass [Resolv::DNS::Resource::IN constant]
37
37
  #
38
+ # @raise [Nslookupot::Error]
39
+ #
38
40
  # @return [Array of Resolv::DNS::Resource]
39
41
  def resolve_resources(name, typeclass)
40
- sock = gen_sock
41
- send_msg(sock, name, typeclass)
42
- msg = recv_msg(sock)
43
- sock.close
42
+ begin
43
+ sock = gen_sock
44
+ send_msg(sock, name, typeclass)
45
+ msg = recv_msg(sock)
46
+ sock.close
47
+ rescue SocketError, Errno::ECONNREFUSED
48
+ err_msg = "#{@server}\##{@port} connection refused"
49
+ raise Error::DoTServerUnavailable.new, err_msg
50
+ rescue OpenSSL::SSL::SSLError => e
51
+ raise Error::DoTServerUnavailable.new, e.message
52
+ end
53
+
54
+ result = msg.answer.map(&:last)
55
+ raise Error::DNNotFound if result.empty?
44
56
 
45
- msg.answer.map(&:last)
57
+ result
46
58
  end
47
59
 
48
60
  private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Nslookupot
4
- VERSION = '0.0.9'
4
+ VERSION = '0.0.10'
5
5
  end
data/lib/nslookupot.rb CHANGED
@@ -8,5 +8,6 @@ require 'openssl'
8
8
  require 'optparse'
9
9
 
10
10
  require 'nslookupot/version'
11
+ require 'nslookupot/error'
11
12
  require 'nslookupot/resolver'
12
13
  require 'nslookupot/cli'
data/nslookupot.gemspec CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.description = spec.summary
14
14
  spec.homepage = 'https://github.com/thekuwayama/nslookupot'
15
15
  spec.license = 'MIT'
16
- spec.required_ruby_version = '>=2.6.0'
16
+ spec.required_ruby_version = '>=2.7.0'
17
17
 
18
18
  spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nslookupot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - thekuwayama
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-08-20 00:00:00.000000000 Z
11
+ date: 2022-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -84,6 +84,7 @@ files:
84
84
  - exe/nslookupot
85
85
  - lib/nslookupot.rb
86
86
  - lib/nslookupot/cli.rb
87
+ - lib/nslookupot/error.rb
87
88
  - lib/nslookupot/resolver.rb
88
89
  - lib/nslookupot/version.rb
89
90
  - nslookupot.gemspec
@@ -102,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
103
  requirements:
103
104
  - - ">="
104
105
  - !ruby/object:Gem::Version
105
- version: 2.6.0
106
+ version: 2.7.0
106
107
  required_rubygems_version: !ruby/object:Gem::Requirement
107
108
  requirements:
108
109
  - - ">="