sensu-plugins-network-checks 4.1.1 → 5.0.0

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: c2ce6e609965658347f8c02baa043e102a8f02c2963c01e0bd3e6ec1376da59a
4
- data.tar.gz: e8728d260dbcedfe9925ab777bc87dc7135a265a0097fa03a3ebc8d93b8bb420
3
+ metadata.gz: 9403cddd827516f176d2c6e53e8269e16c407c9dab1cd403dd03f4be819ee9ea
4
+ data.tar.gz: 43c4090041fb9f1218a6578771b8632221c894a9dbdb8e7f38cc845a8812890c
5
5
  SHA512:
6
- metadata.gz: 993526dc40bef783d55a7ea7270dce6ae98a99326890dfbc84396f15eb32aa6c18481de783b42dca7421b5c9f13ecdf615eeedfbe8da2427240579a89add5086
7
- data.tar.gz: 01b9d44c7164813948a35c2e258c37cf6d7ae2001f105ae7ed710827a9c1e8bce17303907dfb6b752930b9f6c72bff95f3ec9b0aa176597b6af1eabd1e227a14
6
+ metadata.gz: '0058fc17e30c10c24a204b79894ecc051c91d7e056e7b932807bfe0fa3aee32933fe24e1502bec71fabf5cc2a695e481e3689fe14e9d5bb25e8ebbb873737cf5'
7
+ data.tar.gz: e70c078cb49a2d5650767874f52c5e2e5f5d33e00fe0e432a3c8ed0db13fc9ad17c1cda46d80a257647b19fb5c8d522c9e88f59f9ced08183eb3f3cffc983163
@@ -4,11 +4,31 @@ This project adheres to [Semantic Versioning](http://semver.org/).
4
4
  This CHANGELOG follows the format listed [here](https://github.com/sensu-plugins/community/blob/master/HOW_WE_CHANGELOG.md)
5
5
 
6
6
  ## [Unreleased]
7
+ ## [5.0.0] 2020-01-26
8
+ ### Breaking Changes
9
+ - `metrics-sockstat.rb`: Added hostname to default metric scheme.
10
+ - `metrics-netstat-tcp.rb`: Added support to choose between local and remote port metrics. Defaults to local. Metric scheme extended to indicate local or remote.
11
+
12
+ ### Added
13
+ - `metrics-interface.rb`: options to include or exclude interfaces via regex. `-X`, `--exclude-interfaces-regex` and `-I`, `--include-interfaces-regex` as alternative to `-x` and `-i`.
14
+ - `check-ports-bind.rb`: Allow to specify the protocol to check for each port individually (address:port/proto)
15
+
16
+
17
+ ### Changed
18
+ - Updated net-ping runtime dependancy to '2.0.6'
19
+ - Updated rake development dependancy to '~> 12.3'
20
+ - Removed centos build from bonsai.yml
21
+ - Updated whois-parser to ~> 1.2
22
+ - Updated rubocop dependency to '~> 0.79.0'
23
+ - Reconciled issues identified by updating rubocop
24
+ - Updated rake requirement to '~> 13.0'
25
+ - Updated rdoc requirement to '~> 6.2.0'
7
26
 
8
27
  ## [4.1.1] - 2019-12-18
9
28
  ### Changed
10
29
  - Updated README to conform with standardization guidelines (sensu-plugins/community#134)
11
30
  - Updated bundler development depedency to '~> 2.1'
31
+ - Removed codeclimate development dependency
12
32
 
13
33
  ## [4.1.0] - 2019-012-12
14
34
  ### Added
@@ -250,7 +270,8 @@ This CHANGELOG follows the format listed [here](https://github.com/sensu-plugin
250
270
 
251
271
  * initial release, same as community repo
252
272
 
253
- [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-network-checks/compare/4.1.1...HEAD
273
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-network-checks/compare/5.0.0...HEAD
274
+ [5.0.0]: https://github.com/sensu-plugins/sensu-plugins-network-checks/compare/4.1.1...5.0.0
254
275
  [4.1.1]: https://github.com/sensu-plugins/sensu-plugins-network-checks/compare/4.0.0...4.1.1
255
276
  [4.1.0]: https://github.com/sensu-plugins/sensu-plugins-network-checks/compare/4.0.0...4.1.0
256
277
  [4.0.0]: https://github.com/sensu-plugins/sensu-plugins-network-checks/compare/3.2.1...4.0.0
@@ -85,5 +85,4 @@ class CheckMTU < Sensu::Plugin::Check::CLI
85
85
  ok_message = "#{mtu} matches #{required_mtu}"
86
86
  ok ok_message
87
87
  end
88
- # rubocop:enable Metrics/AbcSize
89
88
  end
@@ -68,7 +68,7 @@ class CheckMulticastGroups < Sensu::Plugin::Check::CLI
68
68
  critical "#{diff.size} missing multicast group(s):\n#{diff_output}"
69
69
  end
70
70
  ok
71
- rescue StandardError => ex
72
- critical "Failed to check multicast groups: #{ex}"
71
+ rescue StandardError => e
72
+ critical "Failed to check multicast groups: #{e}"
73
73
  end
74
74
  end
@@ -61,7 +61,7 @@ class CheckNetfilterConntrack < Sensu::Plugin::Check::CLI
61
61
  def run
62
62
  max = nf_conntrack_max
63
63
  count = nf_conntrack_count
64
- percentage = (count.to_f / max.to_f) * 100
64
+ percentage = (count / max.to_f) * 100
65
65
 
66
66
  message "Table is at #{percentage.round(1)}% (#{count}/#{max})"
67
67
 
@@ -92,6 +92,7 @@ class CheckNetstatTCP < Sensu::Plugin::Check::CLI
92
92
  connection_port = m[2].to_i(16)
93
93
  connection_state = TCP_STATES[connection_state]
94
94
  next unless config[:states].include?(connection_state)
95
+
95
96
  if config[:port] && config[:port] == connection_port
96
97
  state_counts[connection_state] += 1
97
98
  elsif !config[:port]
@@ -23,10 +23,11 @@
23
23
  # Ports are comma separated and support ranges
24
24
  # ./check-ports.rb -p 127.0.0.1:22,46.20.205.10 --hard --warn
25
25
  # ./check-ports.rb -p 127.0.0.1:22,46.20.205.10:80
26
+ # ./check-ports.rb -p 127.0.0.1:22,127.0.0.1:1812/udp,46.20.205.10:389/both
26
27
  # If you mention a port without the bind address then the default address is : 0.0.0.0
27
28
  #
28
29
  # NOTES:
29
- # By default, checks for openssh on localhost port 22
30
+ # By default, checks for openssh on localhost port 22 (TCP)
30
31
  #
31
32
  #
32
33
  # LICENSE:
@@ -48,11 +49,11 @@ class CheckPort < Sensu::Plugin::Check::CLI
48
49
  :hard,
49
50
  short: '-d',
50
51
  long: '--hard',
51
- description: 'Check given ports on both, TCP & UDP',
52
+ description: 'Check given ports on both, TCP & UDP, if no explicit protocol is set',
52
53
  boolean: true,
53
54
  default: false
54
-
55
55
  )
56
+
56
57
  option(
57
58
  :host,
58
59
  short: '-H HOSTNAME',
@@ -65,7 +66,7 @@ class CheckPort < Sensu::Plugin::Check::CLI
65
66
  :portbinds,
66
67
  short: '-p PORTS',
67
68
  long: '--portbinds PORTS',
68
- description: 'different address:port to check, comma separated (0.0.0.0:22,localhost:25,127.0.0.0.1:8100-8131,192.168.0.12:3030)',
69
+ description: 'different address:port/protocol to check, comma separated (0.0.0.0:22,localhost:25/tcp,127.0.0.0.1:8100-8131/udp,192.168.0.12:3030/both)',
69
70
  default: '0.0.0.0:22'
70
71
  )
71
72
 
@@ -99,59 +100,126 @@ class CheckPort < Sensu::Plugin::Check::CLI
99
100
  # Severity switcher
100
101
  def severity(warn, text)
101
102
  if warn
102
- warning text.to_s
103
+ warning(text.to_s)
103
104
  else
104
- critical text.to_s
105
+ critical(text.to_s)
105
106
  end
106
107
  end
107
108
 
108
- # Check address:port
109
- def check_port(portbind, okays)
110
- address = portbind.split(':')[0]
111
- port = portbind.split(':')[1]
109
+ # Check valid port number
110
+ def valid_port?(port)
111
+ return false unless port =~ /^[0-9]+$/
112
+
113
+ (0..65_535).include?(port.to_i)
114
+ end
115
+
116
+ # Check valid port range
117
+ def valid_port_range?(port)
118
+ return false unless port =~ /^[0-9]+-[0-9]+$/
119
+
120
+ port_start, port_end = port.split('-', 2)
121
+
122
+ valid_port?(port_start) && valid_port?(port_end) && port_start.to_i <= port_end.to_i
123
+ end
124
+
125
+ # Ports to check
126
+ def portbinds
127
+ default_protocol = config[:hard] ? 'both' : 'tcp'
128
+ binds = []
129
+
130
+ config[:portbinds].split(',').each do |portbind|
131
+ portbind = "#{config[:host]}:#{portbind}" unless portbind.include?(':')
132
+ portbind = "#{portbind}/#{default_protocol}" unless portbind.include?('/')
133
+
134
+ protocol = portbind.split('/')[1] || default_protocol
135
+ address_port = portbind.split('/')[0]
136
+ address = address_port.split(':')[0]
137
+ port = address_port.split(':')[1]
138
+
139
+ if valid_port_range?(port)
140
+ # Port range
141
+
142
+ first_port, last_port = port.split('-', 2)
143
+ (first_port.to_i..last_port.to_i).each do |p|
144
+ binds += portbindings(address, p, protocol)
145
+ end
146
+ elsif valid_port?(port)
147
+ # Single port
148
+
149
+ binds += portbindings(address, port, protocol)
150
+ else
151
+ critical("Invalid port or port range: #{port}")
152
+ end
153
+ end
154
+
155
+ binds
156
+ end
157
+
158
+ def portbindings(address, port, protocol)
159
+ if protocol == 'both'
160
+ [
161
+ { address: address, port: port, protocol: 'tcp' },
162
+ { address: address, port: port, protocol: 'udp' }
163
+ ]
164
+ else
165
+ [{ address: address, port: port, protocol: protocol }]
166
+ end
167
+ end
168
+
169
+ # Portbind hash to string
170
+ def portbind_to_s(portbind)
171
+ "#{portbind[:address]}:#{portbind[:port]}/#{portbind[:protocol]}"
172
+ end
173
+
174
+ # Check TCP port
175
+ def check_tcp_port(portbind, okays)
112
176
  Timeout.timeout(config[:timeout]) do
113
- connection = TCPSocket.new(address, port.to_i)
177
+ connection = TCPSocket.new(portbind[:address], portbind[:port])
114
178
  p connection if config[:debug]
115
- okays.push("TCP-#{portbind}")
179
+ okays.push(portbind_to_s(portbind))
116
180
  end
117
- if config[:hard]
118
- Timeout.timeout(config[:timeout]) do
119
- s = UDPSocket.new
120
- s.connect(address, port.to_i)
121
- s.close
122
- okays.push("UDP-#{portbind}")
123
- end
181
+ end
182
+
183
+ # Check UDP port
184
+ def check_udp_port(portbind, okays)
185
+ Timeout.timeout(config[:timeout]) do
186
+ s = UDPSocket.new
187
+ s.connect(portbind[:address], portbind[:port])
188
+ s.close
189
+ okays.push(portbind_to_s(portbind))
190
+ end
191
+ end
192
+
193
+ # Check address:port/protocol
194
+ def check_port(portbind, okays)
195
+ case portbind[:protocol].downcase
196
+ when 'tcp'
197
+ check_tcp_port(portbind, okays)
198
+ when 'udp'
199
+ check_udp_port(portbind, okays)
200
+ else
201
+ severity(config[:warn], "Unsupported protocol #{portbind_to_s(portbind)}")
124
202
  end
125
203
  rescue Errno::ECONNREFUSED
126
- severity(config[:warn], "Connection refused by #{portbind}")
204
+ severity(config[:warn], "Connection refused by #{portbind_to_s(portbind)}")
127
205
  rescue Timeout::Error
128
- severity(config[:warn], "Connection or read timed out (#{portbind})")
206
+ severity(config[:warn], "Connection or read timed out (#{portbind_to_s(portbind)})")
129
207
  rescue Errno::EHOSTUNREACH
130
- severity(config[:warn], "Check failed to run: No route to host (#{portbind})")
208
+ severity(config[:warn], "Check failed to run: No route to host (#{portbind_to_s(portbind)})")
131
209
  rescue EOFError
132
- severity(config[:warn], "Connection closed unexpectedly (#{portbind})")
210
+ severity(config[:warn], "Connection closed unexpectedly (#{portbind_to_s(portbind)})")
133
211
  end
134
212
 
135
213
  def run
136
- portbinds = config[:portbinds].split(',').flat_map do |port_bind|
137
- port_bind = "#{config[:host]}:#{port_bind}" unless port_bind.include? ':'
138
- # Port range
139
- if port_bind.split(',')[1] =~ /^[0-9]+(-[0-9]+)$/
140
- first_port, last_port = port_bind.split('-')
141
- (first_port.to_i..last_port.to_i).to_a
142
- # Single port
143
- else
144
- port_bind
145
- end
146
- end
147
- array = []
148
- portbinds.each do |port|
149
- check_port(port, array)
214
+ ports = portbinds
215
+ okays = []
216
+
217
+ ports.each do |portbind|
218
+ check_port(portbind, okays)
150
219
  end
151
- multiplier = 1
152
- multiplier = 2 if config[:hard] == true
153
- if array.size == portbinds.size * multiplier
154
- ok "All ports (#{config[:portbinds]}) are reachable - HARD: #{config[:hard]} => SUCCESS: #{array}"
220
+
221
+ if okays.size == ports.size
222
+ ok "All ports (#{config[:portbinds]}) are reachable: #{okays.join(', ')}"
155
223
  else
156
224
  severity(config[:warn], 'port count or pattern does not match')
157
225
  end
@@ -38,6 +38,16 @@ class InterfaceGraphite < Sensu::Plugin::Metric::CLI::Graphite
38
38
  long: '--scheme SCHEME',
39
39
  default: "#{Socket.gethostname}.interface"
40
40
 
41
+ option :excludeinterfaceregex,
42
+ description: 'Regex matching interfaces to exclude',
43
+ short: '-X INTERFACE',
44
+ long: '--exclude-interface-regex'
45
+
46
+ option :includeinterfaceregex,
47
+ description: 'Regex matching interfaces to include',
48
+ short: '-I INTERFACE',
49
+ long: '--include-interface-regex'
50
+
41
51
  option :excludeinterface,
42
52
  description: 'List of interfaces to exclude',
43
53
  short: '-x INTERFACE[,INTERFACE]',
@@ -72,9 +82,12 @@ class InterfaceGraphite < Sensu::Plugin::Metric::CLI::Graphite
72
82
 
73
83
  File.open('/proc/net/dev', 'r').each_line do |line|
74
84
  interface, stats_string = line.scan(/^\s*([^:]+):\s*(.*)$/).first
85
+ next if config[:excludeinterfaceregex] && (interface =~ /#{config[:excludeinterfaceregex]}/)
86
+ next if config[:includeinterfaceregex] && (interface !~ /#{config[:includeinterfaceregex]}/)
75
87
  next if config[:excludeinterface] && config[:excludeinterface].find { |x| line.match(x) }
76
88
  next if config[:includeinterface] && !(config[:includeinterface].find { |x| line.match(x) })
77
89
  next unless interface
90
+
78
91
  if interface.is_a?(String)
79
92
  interface = interface.tr('.', '_')
80
93
  end
@@ -83,6 +83,7 @@ class LinuxPacketMetrics < Sensu::Plugin::Metric::CLI::Graphite
83
83
 
84
84
  Dir.glob('/sys/class/net/*').each do |iface_path|
85
85
  next if File.file?(iface_path)
86
+
86
87
  iface = File.basename(iface_path)
87
88
  next if iface == 'lo'
88
89
 
@@ -78,6 +78,12 @@ class NetstatTCPMetrics < Sensu::Plugin::Metric::CLI::Graphite
78
78
  long: '--port PORT',
79
79
  proc: proc(&:to_i)
80
80
 
81
+ option :type,
82
+ description: 'Specify the type of the port to get metrics for: Local (default) or remote',
83
+ short: '-t local|remote',
84
+ long: '--type local|remote',
85
+ default: 'local'
86
+
81
87
  option :disabletcp6,
82
88
  description: 'Disable tcp6 check',
83
89
  short: '-d',
@@ -89,7 +95,13 @@ class NetstatTCPMetrics < Sensu::Plugin::Metric::CLI::Graphite
89
95
  line.strip!
90
96
  if m = line.match(pattern) # rubocop:disable AssignmentInCondition
91
97
  connection_state = m[5]
92
- connection_port = m[2].to_i(16)
98
+ if config[:type] == 'local'
99
+ connection_port = m[2].to_i(16)
100
+ elsif config[:type] == 'remote'
101
+ connection_port = m[4].to_i(16)
102
+ else
103
+ unknown "Unknown type level #{config[:type]}. Available values are: local, remote."
104
+ end
93
105
  connection_state = TCP_STATES[connection_state]
94
106
  if config[:port] && config[:port] == connection_port
95
107
  state_counts[connection_state] += 1
@@ -115,7 +127,7 @@ class NetstatTCPMetrics < Sensu::Plugin::Metric::CLI::Graphite
115
127
  end
116
128
 
117
129
  state_counts.each do |state, count|
118
- graphite_name = config[:port] ? "#{config[:scheme]}.#{config[:port]}.#{state}" :
130
+ graphite_name = config[:port] ? "#{config[:scheme]}.#{config[:port]}.#{config[:type]}.#{state}" :
119
131
  "#{config[:scheme]}.#{state}"
120
132
  output graphite_name.to_s, count, timestamp
121
133
  end
@@ -73,7 +73,7 @@ class PingMetrics < Sensu::Plugin::Metric::CLI::Graphite
73
73
 
74
74
  OVERVIEW_METRICS = %i[packets_transmitted packets_received packet_loss time].freeze
75
75
  STATISTIC_METRICS = %i[min avg max mdev].freeze
76
- FLOAT = '(\d+\.\d+)'.freeze
76
+ FLOAT = '(\d+\.\d+)'
77
77
 
78
78
  def overview
79
79
  @ping.split("\n")[-2].scan(/^(\d+) packets transmitted, (\d+) received, (\d+)% packet loss, time (\d+)ms/)[0]
@@ -35,7 +35,7 @@ class MetricsSockstat < Sensu::Plugin::Metric::CLI::Graphite
35
35
  description: 'Metric naming scheme, text to prepend to $protocol.$field',
36
36
  long: '--scheme SCHEME',
37
37
  short: '-s SCHEME',
38
- default: 'network.sockets'
38
+ default: "#{Socket.gethostname}.network.sockets"
39
39
 
40
40
  def output_metric(name, value)
41
41
  output "#{@config[:scheme]}.#{name} #{value} #{@timestamp}"
@@ -55,7 +55,7 @@ class MetricsSockstat < Sensu::Plugin::Metric::CLI::Graphite
55
55
  end
56
56
 
57
57
  def read_sockstat
58
- return IO.read('/proc/net/sockstat')
58
+ IO.read('/proc/net/sockstat')
59
59
  rescue StandardError => e
60
60
  unknown "Failed to read /proc/net/sockstat: #{e}"
61
61
  end
@@ -2,9 +2,9 @@
2
2
 
3
3
  module SensuPluginsNetworkChecks
4
4
  module Version
5
- MAJOR = 4
6
- MINOR = 1
7
- PATCH = 1
5
+ MAJOR = 5
6
+ MINOR = 0
7
+ PATCH = 0
8
8
 
9
9
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-network-checks
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.1
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sensu-Plugins and contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-10 00:00:00.000000000 Z
11
+ date: 2020-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sensu-plugin
@@ -44,28 +44,28 @@ dependencies:
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 1.0.2
47
+ version: 1.0.4
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 1.0.2
54
+ version: 1.0.4
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: net-ping
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 1.7.8
61
+ version: 2.0.6
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 1.7.8
68
+ version: 2.0.6
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: whois
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.0.0
89
+ version: '1.2'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.0.0
96
+ version: '1.2'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: bundler
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -108,20 +108,6 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '2.1'
111
- - !ruby/object:Gem::Dependency
112
- name: codeclimate-test-reporter
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '0.4'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '0.4'
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: github-markup
127
113
  requirement: !ruby/object:Gem::Requirement
@@ -156,28 +142,28 @@ dependencies:
156
142
  requirements:
157
143
  - - "~>"
158
144
  - !ruby/object:Gem::Version
159
- version: '10.0'
145
+ version: '13.0'
160
146
  type: :development
161
147
  prerelease: false
162
148
  version_requirements: !ruby/object:Gem::Requirement
163
149
  requirements:
164
150
  - - "~>"
165
151
  - !ruby/object:Gem::Version
166
- version: '10.0'
152
+ version: '13.0'
167
153
  - !ruby/object:Gem::Dependency
168
154
  name: rdoc
169
155
  requirement: !ruby/object:Gem::Requirement
170
156
  requirements:
171
157
  - - "~>"
172
158
  - !ruby/object:Gem::Version
173
- version: 5.1.0
159
+ version: 6.2.0
174
160
  type: :development
175
161
  prerelease: false
176
162
  version_requirements: !ruby/object:Gem::Requirement
177
163
  requirements:
178
164
  - - "~>"
179
165
  - !ruby/object:Gem::Version
180
- version: 5.1.0
166
+ version: 6.2.0
181
167
  - !ruby/object:Gem::Dependency
182
168
  name: redcarpet
183
169
  requirement: !ruby/object:Gem::Requirement
@@ -212,14 +198,14 @@ dependencies:
212
198
  requirements:
213
199
  - - "~>"
214
200
  - !ruby/object:Gem::Version
215
- version: 0.51.0
201
+ version: 0.79.0
216
202
  type: :development
217
203
  prerelease: false
218
204
  version_requirements: !ruby/object:Gem::Requirement
219
205
  requirements:
220
206
  - - "~>"
221
207
  - !ruby/object:Gem::Version
222
- version: 0.51.0
208
+ version: 0.79.0
223
209
  - !ruby/object:Gem::Dependency
224
210
  name: yard
225
211
  requirement: !ruby/object:Gem::Requirement