warning 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +10 -0
- data/README.rdoc +1 -0
- data/lib/warning.rb +51 -42
- data/test/test_freeze_warning.rb +5 -6
- data/test/test_warning.rb +77 -61
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2628e7956e2f0c2a7f55ef1d4397a1f1ff8339d48904b49fc16692934930464
|
4
|
+
data.tar.gz: 72b7fa93465fe52a2907ef2172d3c90694308af52bb2cd5b9117c6e7084419d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8f95072982d387477121b90c13790876743d9a40a0a32c06a1ea72720b85c6d831c4dceff28445dd8be2a3ba6e915670b874a908e6b438cce40c83229f95a15
|
7
|
+
data.tar.gz: 3cf24b069bc071cdf425aad86fae1c0b37b3cf723ee8c365a09a183da7e3f737f7eb454f8b1fbc29be1a9651d01fd286e13562ea442c1ae57ca5fc2c045a7570
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
=== 1.2.0 (2021-02-16)
|
2
|
+
|
3
|
+
* Add support for :void_context as regexp argument to Warning.ignore (jeremyevans)
|
4
|
+
|
5
|
+
* Support :category keyword to Warning.warn on Ruby 3.0 (jeremyevans)
|
6
|
+
|
7
|
+
* Fix :taint warning handling on Ruby 3.0 (jeremyevans)
|
8
|
+
|
9
|
+
* Fix :ambiguous_slash warning handling on Ruby 3.0 (jeremyevans)
|
10
|
+
|
1
11
|
=== 1.1.0 (2020-06-12)
|
2
12
|
|
3
13
|
* Allow Warning.process to be called with a hash of actions instead of a block (jeremyevans)
|
data/README.rdoc
CHANGED
@@ -42,6 +42,7 @@ appropriate regexp. The supported symbols are:
|
|
42
42
|
* :taint
|
43
43
|
* :unused_var
|
44
44
|
* :useless_operator
|
45
|
+
* :void_context
|
45
46
|
|
46
47
|
<tt>Warning.process</tt> takes an optional path prefix and a block, and if the
|
47
48
|
warning string starts with the path prefix, it calls the block with the warning
|
data/lib/warning.rb
CHANGED
@@ -4,7 +4,7 @@ module Warning
|
|
4
4
|
module Processor
|
5
5
|
# Map of symbols to regexps for warning messages to ignore.
|
6
6
|
IGNORE_MAP = {
|
7
|
-
ambiguous_slash: /: warning: ambiguous first argument; put parentheses or a space even after `\/' operator\n\z/,
|
7
|
+
ambiguous_slash: /: warning: ambiguous first argument; put parentheses or a space even after `\/' operator\n\z|: warning: ambiguity between regexp and two divisions: wrap regexp in parentheses or add a space after `\/' operator\n\z/,
|
8
8
|
arg_prefix: /: warning: `[&\*]' interpreted as argument prefix\n\z/,
|
9
9
|
bignum: /: warning: constant ::Bignum is deprecated\n\z/,
|
10
10
|
fixnum: /: warning: constant ::Fixnum is deprecated\n\z/,
|
@@ -17,8 +17,9 @@ module Warning
|
|
17
17
|
useless_operator: /: warning: possibly useless use of [><!=]+ in void context\n\z/,
|
18
18
|
keyword_separation: /: warning: (?:Using the last argument (?:for `.+' )?as keyword parameters is deprecated; maybe \*\* should be added to the call|Passing the keyword argument (?:for `.+' )?as the last hash parameter is deprecated|Splitting the last argument (?:for `.+' )?into positional and keyword parameters is deprecated|The called method (?:`.+' )?is defined here)\n\z/,
|
19
19
|
safe: /: warning: (?:rb_safe_level_2_warning|rb_safe_level|rb_set_safe_level_force|rb_set_safe_level|rb_secure|rb_insecure_operation|rb_check_safe_obj|\$SAFE) will (?:be removed|become a normal global variable) in Ruby 3\.0\n\z/,
|
20
|
-
taint: /: warning: (?:rb_error_untrusted|rb_check_trusted|Pathname#taint|Pathname#untaint|rb_env_path_tainted|Object#tainted\?|Object#taint|Object#untaint|Object#untrusted\?|Object#untrust|Object#trust|rb_obj_infect|rb_tainted_str_new|rb_tainted_str_new_cstr) is deprecated and will be removed in Ruby 3\.2
|
20
|
+
taint: /: warning: (?:rb_error_untrusted|rb_check_trusted|Pathname#taint|Pathname#untaint|rb_env_path_tainted|Object#tainted\?|Object#taint|Object#untaint|Object#untrusted\?|Object#untrust|Object#trust|rb_obj_infect|rb_tainted_str_new|rb_tainted_str_new_cstr) is deprecated and will be removed in Ruby 3\.2\.?\n\z/,
|
21
21
|
mismatched_indentations: /: warning: mismatched indentations at '.+' with '.+' at \d+\n\z/,
|
22
|
+
void_context: /possibly useless use of :: in void context/,
|
22
23
|
}
|
23
24
|
|
24
25
|
# Map of action symbols to procs that return the symbol
|
@@ -75,6 +76,8 @@ module Warning
|
|
75
76
|
# :unused_var :: Ignore warnings for unused variables.
|
76
77
|
# :useless_operator :: Ignore warnings when using operators such as == and > when the
|
77
78
|
# result is not used.
|
79
|
+
# :void_context :: Ignore warnings for :: to reference constants when the result is not
|
80
|
+
# used (often used to trigger autoload).
|
78
81
|
#
|
79
82
|
# Examples:
|
80
83
|
#
|
@@ -126,7 +129,7 @@ module Warning
|
|
126
129
|
# Instead of passing a block, you can pass a hash of actions to take for specific
|
127
130
|
# warnings, using regexp as keys and a callable objects as values:
|
128
131
|
#
|
129
|
-
# Warning.
|
132
|
+
# Warning.process(__FILE__,
|
130
133
|
# /instance variable @\w+ not initialized/ => proc do |warning|
|
131
134
|
# LOGGER.warning(warning)
|
132
135
|
# end,
|
@@ -166,57 +169,63 @@ module Warning
|
|
166
169
|
nil
|
167
170
|
end
|
168
171
|
|
169
|
-
# Handle ignored warnings and warning processors. If the warning is
|
170
|
-
# not ignored, is not a duplicate warning (if checking for duplicates)
|
171
|
-
# and there is no warning processor setup for the warning
|
172
|
-
# string, then use the default behavior of writing to $stderr.
|
173
|
-
def warn(str)
|
174
|
-
synchronize{@ignore.dup}.each do |path, regexp|
|
175
|
-
if str.start_with?(path) && str =~ regexp
|
176
|
-
return
|
177
|
-
end
|
178
|
-
end
|
179
172
|
|
180
|
-
|
181
|
-
|
182
|
-
|
173
|
+
if RUBY_VERSION >= '3.0'
|
174
|
+
method_args = ', category: nil'
|
175
|
+
super_ = "category ? super : super(str)"
|
176
|
+
else
|
177
|
+
super_ = "super"
|
178
|
+
end
|
179
|
+
|
180
|
+
class_eval(<<-END, __FILE__, __LINE__+1)
|
181
|
+
def warn(str#{method_args})
|
182
|
+
synchronize{@ignore.dup}.each do |path, regexp|
|
183
|
+
if str.start_with?(path) && str =~ regexp
|
184
|
+
return
|
185
|
+
end
|
183
186
|
end
|
184
187
|
|
185
|
-
|
186
|
-
|
188
|
+
if @dedup
|
189
|
+
if synchronize{@dedup[str]}
|
190
|
+
return
|
191
|
+
end
|
192
|
+
|
193
|
+
synchronize{@dedup[str] = true}
|
194
|
+
end
|
187
195
|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
196
|
+
action = catch(:action) do
|
197
|
+
synchronize{@process.dup}.each do |path, block|
|
198
|
+
if str.start_with?(path)
|
199
|
+
if block.is_a?(Hash)
|
200
|
+
block.each do |regexp, blk|
|
201
|
+
if str =~ regexp
|
202
|
+
throw :action, blk.call(str)
|
203
|
+
end
|
195
204
|
end
|
205
|
+
else
|
206
|
+
throw :action, block.call(str)
|
196
207
|
end
|
197
|
-
else
|
198
|
-
throw :action, block.call(str)
|
199
208
|
end
|
200
209
|
end
|
210
|
+
|
211
|
+
:default
|
201
212
|
end
|
202
213
|
|
203
|
-
|
204
|
-
|
214
|
+
case action
|
215
|
+
when :default
|
216
|
+
#{super_}
|
217
|
+
when :backtrace
|
218
|
+
#{super_}
|
219
|
+
$stderr.puts caller
|
220
|
+
when :raise
|
221
|
+
raise str
|
222
|
+
else
|
223
|
+
# nothing
|
224
|
+
end
|
205
225
|
|
206
|
-
|
207
|
-
when :default
|
208
|
-
super
|
209
|
-
when :backtrace
|
210
|
-
super
|
211
|
-
$stderr.puts caller
|
212
|
-
when :raise
|
213
|
-
raise str
|
214
|
-
else
|
215
|
-
# nothing
|
226
|
+
nil
|
216
227
|
end
|
217
|
-
|
218
|
-
nil
|
219
|
-
end
|
228
|
+
END
|
220
229
|
|
221
230
|
private
|
222
231
|
|
data/test/test_freeze_warning.rb
CHANGED
@@ -40,31 +40,30 @@ class WarningFreezeTest < Minitest::Test
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def test_warning_ignore
|
43
|
-
obj = Object.new
|
44
43
|
w = nil
|
45
44
|
|
46
|
-
Warning.ignore(/
|
45
|
+
Warning.ignore(/global variable `\$test_warning_ignore' not initialized/)
|
47
46
|
Warning.process do |warning|
|
48
47
|
w = [4, warning]
|
49
48
|
end
|
50
49
|
Warning.freeze
|
51
50
|
|
52
51
|
assert_raises RuntimeError do
|
53
|
-
Warning.ignore(/
|
52
|
+
Warning.ignore(/global variable `\$test_warning_ignore' not initialized/)
|
54
53
|
end
|
55
54
|
assert_raises RuntimeError do
|
56
55
|
Warning.process{|warning| w = [4, warning]}
|
57
56
|
end
|
58
57
|
|
59
58
|
assert_warning '' do
|
60
|
-
|
59
|
+
$test_warning_ignore
|
61
60
|
end
|
62
61
|
assert_nil w
|
63
62
|
|
64
63
|
assert_warning '' do
|
65
|
-
|
64
|
+
$test_warning_ignore2
|
66
65
|
end
|
67
66
|
assert_equal(4, w.first)
|
68
|
-
assert_match(/
|
67
|
+
assert_match(/global variable `\$test_warning_ignore2' not initialized/, w.last)
|
69
68
|
end
|
70
69
|
end
|
data/test/test_warning.rb
CHANGED
@@ -48,71 +48,65 @@ class WarningTest < Minitest::Test
|
|
48
48
|
Warning.clear
|
49
49
|
end
|
50
50
|
|
51
|
-
def ivar
|
52
|
-
Object.new.instance_variable_get(:@ivar)
|
53
|
-
end
|
54
|
-
|
55
51
|
def test_warning_dedup
|
56
|
-
|
57
|
-
|
52
|
+
gvar = ->{$test_warning_dedup}
|
53
|
+
|
54
|
+
assert_warning(/global variable `\$test_warning_dedup' not initialized/) do
|
55
|
+
gvar.call
|
58
56
|
end
|
59
|
-
assert_warning(/
|
60
|
-
|
57
|
+
assert_warning(/global variable `\$test_warning_dedup' not initialized/) do
|
58
|
+
gvar.call
|
61
59
|
end
|
62
60
|
|
63
61
|
Warning.dedup
|
64
62
|
|
65
|
-
assert_warning(/
|
66
|
-
|
63
|
+
assert_warning(/global variable `\$test_warning_dedup' not initialized/) do
|
64
|
+
gvar.call
|
67
65
|
end
|
68
66
|
assert_warning('') do
|
69
|
-
|
67
|
+
gvar.call
|
70
68
|
end
|
71
69
|
end
|
72
70
|
|
73
71
|
def test_warning_ignore
|
74
|
-
|
75
|
-
|
76
|
-
assert_warning(/instance variable @ivar not initialized/) do
|
77
|
-
assert_nil(obj.instance_variable_get(:@ivar))
|
78
|
-
end
|
79
|
-
|
80
|
-
assert_warning(/instance variable @ivar not initialized/) do
|
81
|
-
assert_nil(obj.instance_variable_get(:@ivar))
|
72
|
+
assert_warning(/global variable `\$test_warning_ignore' not initialized/) do
|
73
|
+
assert_nil($test_warning_ignore)
|
82
74
|
end
|
83
75
|
|
84
|
-
Warning.ignore(/
|
76
|
+
Warning.ignore(/global variable `\$test_warning_ignore' not initialized/)
|
85
77
|
|
86
78
|
assert_warning '' do
|
87
|
-
assert_nil(
|
79
|
+
assert_nil($test_warning_ignore)
|
88
80
|
end
|
89
81
|
|
90
|
-
assert_warning(/
|
91
|
-
assert_nil(
|
82
|
+
assert_warning(/global variable `\$test_warning_ignore2' not initialized/) do
|
83
|
+
assert_nil($test_warning_ignore2)
|
92
84
|
end
|
93
85
|
|
94
|
-
Warning.ignore(/
|
86
|
+
Warning.ignore(/global variable `\$test_warning_ignore2' not initialized/, __FILE__)
|
95
87
|
|
96
88
|
assert_warning '' do
|
97
|
-
assert_nil(
|
89
|
+
assert_nil($test_warning_ignore2)
|
98
90
|
end
|
99
91
|
|
100
|
-
assert_warning(/
|
101
|
-
assert_nil(
|
92
|
+
assert_warning(/global variable `\$test_warning_ignore3' not initialized/) do
|
93
|
+
assert_nil($test_warning_ignore3)
|
102
94
|
end
|
103
95
|
|
104
|
-
Warning.ignore(/
|
96
|
+
Warning.ignore(/global variable `\$test_warning_ignore3' not initialized/, __FILE__ + 'a')
|
105
97
|
|
106
|
-
assert_warning(/
|
107
|
-
assert_nil(
|
98
|
+
assert_warning(/global variable `\$test_warning_ignore3' not initialized/) do
|
99
|
+
assert_nil($test_warning_ignore3)
|
108
100
|
end
|
109
101
|
end
|
110
102
|
|
111
103
|
def test_warning_ignore_missing_ivar
|
112
104
|
Warning.clear
|
113
105
|
|
114
|
-
|
115
|
-
|
106
|
+
unless RUBY_VERSION >= '3.0'
|
107
|
+
assert_warning(/instance variable @ivar not initialized/) do
|
108
|
+
assert_nil(instance_variable_get(:@ivar))
|
109
|
+
end
|
116
110
|
end
|
117
111
|
|
118
112
|
Warning.ignore(:missing_ivar, __FILE__)
|
@@ -184,9 +178,21 @@ class WarningTest < Minitest::Test
|
|
184
178
|
end
|
185
179
|
end
|
186
180
|
|
181
|
+
def test_warning_ignore_void_context
|
182
|
+
assert_warning(/warning: possibly useless use of :: in void context/) do
|
183
|
+
instance_eval('::Object; nil', __FILE__, __LINE__)
|
184
|
+
end
|
185
|
+
|
186
|
+
Warning.ignore(:void_context, __FILE__)
|
187
|
+
|
188
|
+
assert_warning '' do
|
189
|
+
instance_eval('::Object; nil', __FILE__, __LINE__)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
187
193
|
def test_warning_ignore_ambiguous_slash
|
188
194
|
def self.d(re); end
|
189
|
-
assert_warning(/warning:
|
195
|
+
assert_warning(/warning: ambi/) do
|
190
196
|
instance_eval('d /a/', __FILE__)
|
191
197
|
end
|
192
198
|
|
@@ -368,15 +374,14 @@ class WarningTest < Minitest::Test
|
|
368
374
|
end
|
369
375
|
|
370
376
|
def test_warning_process
|
371
|
-
obj = Object.new
|
372
377
|
warn = nil
|
373
378
|
|
374
379
|
Warning.process(__FILE__+'a') do |warning|
|
375
380
|
warn = [0, warning]
|
376
381
|
end
|
377
382
|
|
378
|
-
assert_warning(/
|
379
|
-
|
383
|
+
assert_warning(/global variable `\$test_warning_process' not initialized/) do
|
384
|
+
$test_warning_process
|
380
385
|
end
|
381
386
|
assert_nil(warn)
|
382
387
|
|
@@ -385,10 +390,10 @@ class WarningTest < Minitest::Test
|
|
385
390
|
end
|
386
391
|
|
387
392
|
assert_warning '' do
|
388
|
-
|
393
|
+
$test_warning_process2
|
389
394
|
end
|
390
395
|
assert_equal(1, warn.first)
|
391
|
-
assert_match(/
|
396
|
+
assert_match(/global variable `\$test_warning_process2' not initialized/, warn.last)
|
392
397
|
warn = nil
|
393
398
|
|
394
399
|
Warning.process(File.dirname(__FILE__)) do |warning|
|
@@ -396,10 +401,10 @@ class WarningTest < Minitest::Test
|
|
396
401
|
end
|
397
402
|
|
398
403
|
assert_warning '' do
|
399
|
-
|
404
|
+
$test_warning_process3
|
400
405
|
end
|
401
406
|
assert_equal(1, warn.first)
|
402
|
-
assert_match(/
|
407
|
+
assert_match(/global variable `\$test_warning_process3' not initialized/, warn.last)
|
403
408
|
warn = nil
|
404
409
|
|
405
410
|
Warning.process(__FILE__+':') do |warning|
|
@@ -407,16 +412,16 @@ class WarningTest < Minitest::Test
|
|
407
412
|
end
|
408
413
|
|
409
414
|
assert_warning '' do
|
410
|
-
|
415
|
+
$test_warning_process4
|
411
416
|
end
|
412
417
|
assert_equal(3, warn.first)
|
413
|
-
assert_match(/
|
418
|
+
assert_match(/global variable `\$test_warning_process4' not initialized/, warn.last)
|
414
419
|
warn = nil
|
415
420
|
|
416
421
|
Warning.clear
|
417
422
|
|
418
|
-
assert_warning(/
|
419
|
-
|
423
|
+
assert_warning(/global variable `\$test_warning_process5' not initialized/) do
|
424
|
+
$test_warning_process5
|
420
425
|
end
|
421
426
|
assert_nil(warn)
|
422
427
|
|
@@ -425,10 +430,10 @@ class WarningTest < Minitest::Test
|
|
425
430
|
end
|
426
431
|
|
427
432
|
assert_warning '' do
|
428
|
-
|
433
|
+
$test_warning_process6
|
429
434
|
end
|
430
435
|
assert_equal(4, warn.first)
|
431
|
-
assert_match(/
|
436
|
+
assert_match(/global variable `\$test_warning_process6' not initialized/, warn.last)
|
432
437
|
end
|
433
438
|
|
434
439
|
def test_warning_process_block_return_default
|
@@ -438,10 +443,10 @@ class WarningTest < Minitest::Test
|
|
438
443
|
:default
|
439
444
|
end
|
440
445
|
|
441
|
-
assert_warning(/
|
442
|
-
|
446
|
+
assert_warning(/global variable `\$test_warning_process_block_return_default' not initialized/) do
|
447
|
+
$test_warning_process_block_return_default
|
443
448
|
end
|
444
|
-
assert_match(/
|
449
|
+
assert_match(/global variable `\$test_warning_process_block_return_default' not initialized/, w)
|
445
450
|
end
|
446
451
|
|
447
452
|
def test_warning_process_block_return_backtrace
|
@@ -451,10 +456,10 @@ class WarningTest < Minitest::Test
|
|
451
456
|
:backtrace
|
452
457
|
end
|
453
458
|
|
454
|
-
assert_warning(/
|
455
|
-
|
459
|
+
assert_warning(/global variable `\$test_warning_process_block_return_backtrace' not initialized.*#{__FILE__}/m) do
|
460
|
+
$test_warning_process_block_return_backtrace
|
456
461
|
end
|
457
|
-
assert_match(/
|
462
|
+
assert_match(/global variable `\$test_warning_process_block_return_backtrace' not initialized/, w)
|
458
463
|
end
|
459
464
|
|
460
465
|
def test_warning_process_block_return_raise
|
@@ -464,26 +469,29 @@ class WarningTest < Minitest::Test
|
|
464
469
|
:raise
|
465
470
|
end
|
466
471
|
|
467
|
-
assert_raises(RuntimeError
|
468
|
-
|
472
|
+
assert_raises(RuntimeError) do
|
473
|
+
$test_warning_process_block_return_raise
|
469
474
|
end
|
470
|
-
assert_match(/
|
475
|
+
assert_match(/global variable `\$test_warning_process_block_return_raise' not initialized/, w)
|
471
476
|
end
|
472
477
|
|
473
478
|
def test_warning_process_action
|
474
479
|
w = nil
|
475
|
-
Warning.process(__FILE__, :
|
480
|
+
Warning.process(__FILE__, :method_redefined=>:default, :missing_gvar=>:backtrace, :ambiguous_slash=>:raise)
|
476
481
|
Warning.process(__FILE__, :not_reached=>proc do |warning|
|
477
482
|
w = warning
|
478
483
|
:raise
|
479
484
|
end)
|
480
485
|
|
481
|
-
assert_warning(/
|
482
|
-
|
486
|
+
assert_warning(/warning: method redefined/) do
|
487
|
+
Class.new do
|
488
|
+
def a; end
|
489
|
+
def a; end
|
490
|
+
end
|
483
491
|
end
|
484
492
|
|
485
|
-
assert_warning(/global variable `\$
|
486
|
-
$
|
493
|
+
assert_warning(/global variable `\$test_warning_process_action' not initialized.*#{__FILE__}/m) do
|
494
|
+
$test_warning_process_action
|
487
495
|
end
|
488
496
|
|
489
497
|
Warning.process(__FILE__) do |warning|
|
@@ -491,7 +499,7 @@ class WarningTest < Minitest::Test
|
|
491
499
|
:raise
|
492
500
|
end
|
493
501
|
|
494
|
-
assert_raises(RuntimeError, /warning:
|
502
|
+
assert_raises(RuntimeError, /warning: ambi/) do
|
495
503
|
EnvUtil.verbose_warning{instance_eval('d /a/', __FILE__)}
|
496
504
|
end
|
497
505
|
|
@@ -512,4 +520,12 @@ class WarningTest < Minitest::Test
|
|
512
520
|
Warning.process(__FILE__, :missing_ivar=>:default){}
|
513
521
|
end
|
514
522
|
end
|
523
|
+
|
524
|
+
if RUBY_VERSION >= '3.0'
|
525
|
+
def test_warning_warn_category_keyword
|
526
|
+
assert_warning('foo') do
|
527
|
+
Warning.warn("foo", category: :deprecated)
|
528
|
+
end
|
529
|
+
end
|
530
|
+
end
|
515
531
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: warning
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Evans
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest-global_expectations
|
@@ -76,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
78
|
requirements: []
|
79
|
-
rubygems_version: 3.
|
79
|
+
rubygems_version: 3.2.3
|
80
80
|
signing_key:
|
81
81
|
specification_version: 4
|
82
82
|
summary: Add custom processing for warnings
|