network_utils 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -3
- data/.travis.yml +6 -2
- data/README.md +11 -4
- data/bin/console +0 -0
- data/bin/setup +0 -0
- data/lib/network_utils/port.rb +59 -0
- data/lib/network_utils/url_info.rb +15 -13
- data/lib/network_utils/version.rb +1 -1
- data/lib/tapp_printer.rb +27 -0
- data/network_utils.gemspec +13 -12
- metadata +43 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d72ff1687c23b9699d0e45838f3530153b2583043beece802807a8a611b504f6
|
4
|
+
data.tar.gz: d2bb6f5bab2872ba4173af0482b39f9aea86a14d801bcd69052776bd5ff72204
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 184ab1705999597e786fbfc9972207d8f6524f245f412dc04b7e43c7c5391196455201890c4706e83451ace42382da3681eb4f4a6ec0bc651d1e3d8cba59af13
|
7
|
+
data.tar.gz: a24a0373043314f6bd066654b041b5117af68364946f08432d4f814e4b85a63be0ee965ce16782c0f35a7ec37337b6266174506bc33ea31912ba15b4227b1a04
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -4,7 +4,8 @@
|
|
4
4
|
<img width="360" title="logo" src ="./img/network_utils.png" />
|
5
5
|
</p>
|
6
6
|
|
7
|
-
> A set of convenient network utils to get URL info before downloading a resource, work with ports, etc.
|
7
|
+
> A set of convenient network utils utils to get URL info before downloading a resource, work with ports, etc.
|
8
|
+
> [![Build Status](https://travis-ci.org/smileart/network_utils.svg?branch=master)](https://travis-ci.org/smileart/network_utils)
|
8
9
|
|
9
10
|
## Installation
|
10
11
|
|
@@ -35,20 +36,26 @@ info.is?([:text, 'text/html', 'application/xml', 'text/csv'])
|
|
35
36
|
info.content_type # => 'text/html'
|
36
37
|
info.size # => 100500
|
37
38
|
info.is?('text/html') # => true
|
38
|
-
info.is?(:image)
|
39
|
+
info.is?(:image). # => false
|
39
40
|
```
|
40
41
|
|
41
42
|
```ruby
|
42
43
|
# NetworkUtils::Port
|
43
44
|
|
44
|
-
NetworkUtils::Port.random
|
45
|
-
NetworkUtils::Port.random_free
|
45
|
+
NetworkUtils::Port.random # => 50200
|
46
|
+
NetworkUtils::Port.random_free # => 65000
|
46
47
|
|
47
48
|
NetworkUtils::Port.available?(65000) # => true
|
48
49
|
NetworkUtils::Port.free?(50200) # => false
|
49
50
|
|
50
51
|
NetworkUtils::Port.opened?(50200) # => true
|
51
52
|
NetworkUtils::Port.occupied?(65000) # => false
|
53
|
+
|
54
|
+
NetworkUtils::Port.name(8080) # => ["http-alt"]
|
55
|
+
NetworkUtils::Port.service(8080) # => [
|
56
|
+
# {:name=>"http-alt", :port=>8080, :protocol=>:udp, :description=>"HTTP Alternate (see port 80)"},
|
57
|
+
# {:name=>"http-alt", :port=>8080, :protocol=>:tcp, :description=>"HTTP Alternate (see port 80)"}
|
58
|
+
# ]
|
52
59
|
```
|
53
60
|
|
54
61
|
## Development
|
data/bin/console
CHANGED
File without changes
|
data/bin/setup
CHANGED
File without changes
|
data/lib/network_utils/port.rb
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
require 'socket'
|
4
4
|
require 'timeout'
|
5
5
|
|
6
|
+
require_relative '../tapp_printer' if ENV['DEBUG']
|
7
|
+
|
6
8
|
##
|
7
9
|
# Namespace Module to wrap self-written Network tools
|
8
10
|
module NetworkUtils
|
@@ -17,6 +19,10 @@ module NetworkUtils
|
|
17
19
|
# Internet Assigned Numbers Authority suggested range
|
18
20
|
IANA_PORT_RANGE = (49_152..65_535).freeze
|
19
21
|
|
22
|
+
# Current system's IANA port assignments file
|
23
|
+
# Cound be changed using SERVICES_FILE_PATH ENV variable
|
24
|
+
SERVICES_FILE_PATH = '/etc/services'
|
25
|
+
|
20
26
|
# Checks if the port is available (free) on the host
|
21
27
|
#
|
22
28
|
# @example
|
@@ -89,6 +95,59 @@ module NetworkUtils
|
|
89
95
|
nil
|
90
96
|
end
|
91
97
|
|
98
|
+
# Checks the IANA port assignments file for port info
|
99
|
+
#
|
100
|
+
# @example
|
101
|
+
# NetworkUtils::Port.service(8080)
|
102
|
+
# => [
|
103
|
+
# {:name=>"http-alt", :port=>8080, :protocol=>:udp, :description=>"HTTP Alternate (see port 80)"},
|
104
|
+
# {:name=>"http-alt", :port=>8080, :protocol=>:tcp, :description=>"HTTP Alternate (see port 80)"}
|
105
|
+
# ]
|
106
|
+
#
|
107
|
+
# @note When looking just for a short name, use ::name
|
108
|
+
#
|
109
|
+
# @param [Integer] port the port we want to check out
|
110
|
+
#
|
111
|
+
# @return [Array] port services info with the :name, :port, :protocol, :description
|
112
|
+
def self.service(port)
|
113
|
+
# check the IANA port assignments file (default or custom)
|
114
|
+
services_file = ENV['SERVICES_FILE_PATH'] || SERVICES_FILE_PATH
|
115
|
+
return nil unless File.exist?(services_file)
|
116
|
+
|
117
|
+
# read the file and extract info (ony lines matching "bacnet 47808/tcp # Building Automation and Control Networks" format)
|
118
|
+
services = File.read(services_file).lines.map do |line|
|
119
|
+
line_elements = line.split(/\s+/)
|
120
|
+
|
121
|
+
next unless line_elements[1] =~ /\d+\//
|
122
|
+
|
123
|
+
known_port, known_protocol = line_elements[1].split('/')
|
124
|
+
|
125
|
+
{
|
126
|
+
name: line_elements[0],
|
127
|
+
port: known_port.to_i,
|
128
|
+
protocol: known_protocol.to_sym,
|
129
|
+
description: line_elements[3..-1]&.join(' ')
|
130
|
+
}
|
131
|
+
end
|
132
|
+
|
133
|
+
# extract infor about the requested port
|
134
|
+
Array.wrap(services.compact.find_all { |s| s[:port] == port })
|
135
|
+
end
|
136
|
+
|
137
|
+
# Checks the IANA port assignments file and returns possible service name
|
138
|
+
#
|
139
|
+
# @example
|
140
|
+
# NetworkUtils::Port.name(8080) => ["http-alt"]
|
141
|
+
#
|
142
|
+
# @note Just a convinience method over ::service
|
143
|
+
#
|
144
|
+
# @param [Integer] port the port we want to check out
|
145
|
+
#
|
146
|
+
# @return [Array] port's possible serivce names
|
147
|
+
def self.name(port)
|
148
|
+
self.service(port).map { |s| s.fetch(:name) }.uniq
|
149
|
+
end
|
150
|
+
|
92
151
|
# Add a few nice aliases
|
93
152
|
class << self
|
94
153
|
# opened? → occupied?
|
@@ -6,9 +6,15 @@ require 'addressable/uri'
|
|
6
6
|
require 'url_regex'
|
7
7
|
require 'active_support/core_ext/array/wrap'
|
8
8
|
|
9
|
+
require_relative '../tapp_printer' if ENV['DEBUG']
|
10
|
+
|
9
11
|
##
|
10
12
|
# Namespace Module to wrap self-written Network tools
|
11
13
|
module NetworkUtils
|
14
|
+
# Additional time to add to Ruby timeout as a workound
|
15
|
+
# for HTTParty timeout issue when with the same timeout Ruby fails earlier
|
16
|
+
CODE_TIMEOUT_EXTRA = 3
|
17
|
+
|
12
18
|
##
|
13
19
|
# Simple class to get URL info (validation/existance, headers, content-type)
|
14
20
|
# Allows to get all this stuff without actually downloading huge files like
|
@@ -18,10 +24,10 @@ module NetworkUtils
|
|
18
24
|
# Initialise a UrlInfo for a particular URL
|
19
25
|
#
|
20
26
|
# @param [String] url the URL you want to get info about
|
21
|
-
# @param [Integer] request_timeout Max time to wait for headers from the server
|
27
|
+
# @param [Integer] request_timeout Max time to wait for headers from the server (seconds)
|
22
28
|
#
|
23
29
|
def initialize(url, request_timeout = 10)
|
24
|
-
@url = url.
|
30
|
+
@url = String.new(url.to_s).force_encoding('UTF-8')
|
25
31
|
@request_timeout = request_timeout
|
26
32
|
end
|
27
33
|
|
@@ -74,28 +80,24 @@ module NetworkUtils
|
|
74
80
|
#
|
75
81
|
# @return [Hash, nil] remote resource HTTP headers list or nil
|
76
82
|
def headers
|
77
|
-
@headers ||= request_headers
|
78
|
-
end
|
79
|
-
|
80
|
-
private
|
81
|
-
|
82
|
-
def request_headers
|
83
83
|
return nil if @url.to_s.empty?
|
84
84
|
return nil unless (encoded_url = encode(@url))
|
85
85
|
|
86
|
-
Timeout.timeout(@request_timeout) do
|
86
|
+
Timeout.timeout(@request_timeout + CODE_TIMEOUT_EXTRA) do
|
87
87
|
response = HTTParty.head(encoded_url, timeout: @request_timeout)
|
88
|
-
|
89
88
|
raise response.response if response.response.is_a?(Net::HTTPServerError) ||
|
90
89
|
response.response.is_a?(Net::HTTPClientError)
|
91
90
|
|
92
|
-
|
91
|
+
@headers ||= response.headers
|
93
92
|
end
|
94
|
-
rescue SocketError, ThreadError, Errno::
|
95
|
-
|
93
|
+
rescue SocketError, ThreadError, Errno::ENETUNREACH, Errno::ECONNREFUSED,
|
94
|
+
Errno::EADDRNOTAVAIL, Timeout::Error, TypeError,
|
95
|
+
Net::HTTPServerError, Net::HTTPClientError, Net::OpenTimeout
|
96
96
|
nil
|
97
97
|
end
|
98
98
|
|
99
|
+
private
|
100
|
+
|
99
101
|
def encode(url)
|
100
102
|
Addressable::URI.encode(url)
|
101
103
|
end
|
data/lib/tapp_printer.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'tapp'
|
2
|
+
require 'tapp/printer'
|
3
|
+
require 'amazing_print'
|
4
|
+
|
5
|
+
# Module to define own Tapp printer
|
6
|
+
module Tapp::Printer
|
7
|
+
# Custom AmazingPrint based printer for Tapp
|
8
|
+
class AmazingPrint < Base
|
9
|
+
# Prints the object using custom (AmazingPrint) printer
|
10
|
+
#
|
11
|
+
# @param [Object, Array] *args arbitrary Object to print
|
12
|
+
#
|
13
|
+
# @return [nil] prints to IO, returns nothing
|
14
|
+
def print(*args)
|
15
|
+
ap *args
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
register :amazing_print, AmazingPrint
|
20
|
+
end
|
21
|
+
|
22
|
+
# Configure Tapp to use our custom printer and report caller
|
23
|
+
Tapp.configure do |config|
|
24
|
+
config.report_caller = true
|
25
|
+
config.default_printer = :amazing_print
|
26
|
+
end
|
27
|
+
|
data/network_utils.gemspec
CHANGED
@@ -22,21 +22,22 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
23
|
spec.require_paths = ['lib']
|
24
24
|
|
25
|
-
spec.add_development_dependency '
|
26
|
-
spec.add_development_dependency '
|
25
|
+
spec.add_development_dependency 'amazing_print', '~> 1.2'
|
26
|
+
spec.add_development_dependency 'bundler', '~> 2.1'
|
27
|
+
spec.add_development_dependency 'byebug', '~> 11.1'
|
27
28
|
spec.add_development_dependency 'inch', '~> 0.8'
|
28
|
-
spec.add_development_dependency '
|
29
|
-
spec.add_development_dependency 'rake', '~>
|
30
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
31
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
29
|
+
spec.add_development_dependency 'tapp', '~> 1.5'
|
30
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
31
|
+
spec.add_development_dependency 'rspec', '~> 3.9'
|
32
|
+
spec.add_development_dependency 'rubocop', '~> 0.91'
|
32
33
|
spec.add_development_dependency 'rubygems-tasks', '~> 0.2'
|
33
|
-
spec.add_development_dependency 'simplecov', '~> 0.
|
34
|
-
spec.add_development_dependency 'vcr', '~>
|
35
|
-
spec.add_development_dependency 'webmock', '~> 3.
|
34
|
+
spec.add_development_dependency 'simplecov', '~> 0.19'
|
35
|
+
spec.add_development_dependency 'vcr', '~> 6.0'
|
36
|
+
spec.add_development_dependency 'webmock', '~> 3.9'
|
36
37
|
spec.add_development_dependency 'yard', '~> 0.9'
|
37
38
|
|
38
|
-
spec.add_dependency 'activesupport', '~>
|
39
|
-
spec.add_dependency 'addressable', '~> 2.
|
40
|
-
spec.add_dependency 'httparty', '~> 0.
|
39
|
+
spec.add_dependency 'activesupport', '~> 6.0'
|
40
|
+
spec.add_dependency 'addressable', '~> 2.7'
|
41
|
+
spec.add_dependency 'httparty', '~> 0.18'
|
41
42
|
spec.add_dependency 'url_regex', '~> 0.0.3'
|
42
43
|
end
|
metadata
CHANGED
@@ -1,43 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: network_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- smileart
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: amazing_print
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.2'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.2'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - "~>"
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1
|
33
|
+
version: '2.1'
|
20
34
|
type: :development
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
38
|
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1
|
40
|
+
version: '2.1'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: byebug
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
47
|
+
version: '11.1'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
54
|
+
version: '11.1'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: inch
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,61 +67,61 @@ dependencies:
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0.8'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: tapp
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
75
|
+
version: '1.5'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
82
|
+
version: '1.5'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rake
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
89
|
+
version: '13.0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
96
|
+
version: '13.0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rspec
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: '3.
|
103
|
+
version: '3.9'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: '3.
|
110
|
+
version: '3.9'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: rubocop
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - "~>"
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: '0.
|
117
|
+
version: '0.91'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version: '0.
|
124
|
+
version: '0.91'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: rubygems-tasks
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,42 +142,42 @@ dependencies:
|
|
128
142
|
requirements:
|
129
143
|
- - "~>"
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0.
|
145
|
+
version: '0.19'
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
150
|
- - "~>"
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version: '0.
|
152
|
+
version: '0.19'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: vcr
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
157
|
- - "~>"
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
159
|
+
version: '6.0'
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
164
|
- - "~>"
|
151
165
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
166
|
+
version: '6.0'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: webmock
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
156
170
|
requirements:
|
157
171
|
- - "~>"
|
158
172
|
- !ruby/object:Gem::Version
|
159
|
-
version: '3.
|
173
|
+
version: '3.9'
|
160
174
|
type: :development
|
161
175
|
prerelease: false
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
163
177
|
requirements:
|
164
178
|
- - "~>"
|
165
179
|
- !ruby/object:Gem::Version
|
166
|
-
version: '3.
|
180
|
+
version: '3.9'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: yard
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,42 +198,42 @@ dependencies:
|
|
184
198
|
requirements:
|
185
199
|
- - "~>"
|
186
200
|
- !ruby/object:Gem::Version
|
187
|
-
version: '
|
201
|
+
version: '6.0'
|
188
202
|
type: :runtime
|
189
203
|
prerelease: false
|
190
204
|
version_requirements: !ruby/object:Gem::Requirement
|
191
205
|
requirements:
|
192
206
|
- - "~>"
|
193
207
|
- !ruby/object:Gem::Version
|
194
|
-
version: '
|
208
|
+
version: '6.0'
|
195
209
|
- !ruby/object:Gem::Dependency
|
196
210
|
name: addressable
|
197
211
|
requirement: !ruby/object:Gem::Requirement
|
198
212
|
requirements:
|
199
213
|
- - "~>"
|
200
214
|
- !ruby/object:Gem::Version
|
201
|
-
version: '2.
|
215
|
+
version: '2.7'
|
202
216
|
type: :runtime
|
203
217
|
prerelease: false
|
204
218
|
version_requirements: !ruby/object:Gem::Requirement
|
205
219
|
requirements:
|
206
220
|
- - "~>"
|
207
221
|
- !ruby/object:Gem::Version
|
208
|
-
version: '2.
|
222
|
+
version: '2.7'
|
209
223
|
- !ruby/object:Gem::Dependency
|
210
224
|
name: httparty
|
211
225
|
requirement: !ruby/object:Gem::Requirement
|
212
226
|
requirements:
|
213
227
|
- - "~>"
|
214
228
|
- !ruby/object:Gem::Version
|
215
|
-
version: '0.
|
229
|
+
version: '0.18'
|
216
230
|
type: :runtime
|
217
231
|
prerelease: false
|
218
232
|
version_requirements: !ruby/object:Gem::Requirement
|
219
233
|
requirements:
|
220
234
|
- - "~>"
|
221
235
|
- !ruby/object:Gem::Version
|
222
|
-
version: '0.
|
236
|
+
version: '0.18'
|
223
237
|
- !ruby/object:Gem::Dependency
|
224
238
|
name: url_regex
|
225
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -259,6 +273,7 @@ files:
|
|
259
273
|
- lib/network_utils/port.rb
|
260
274
|
- lib/network_utils/url_info.rb
|
261
275
|
- lib/network_utils/version.rb
|
276
|
+
- lib/tapp_printer.rb
|
262
277
|
- network_utils.gemspec
|
263
278
|
homepage: http://github.com/smileart/network_utils
|
264
279
|
licenses:
|
@@ -279,8 +294,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
279
294
|
- !ruby/object:Gem::Version
|
280
295
|
version: '0'
|
281
296
|
requirements: []
|
282
|
-
|
283
|
-
rubygems_version: 2.7.8
|
297
|
+
rubygems_version: 3.1.2
|
284
298
|
signing_key:
|
285
299
|
specification_version: 4
|
286
300
|
summary: A set of convenient network utils
|