nslookupot 0.0.9 → 0.0.10

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