debride 1.11.0 → 1.13.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/History.rdoc +31 -0
- data/README.rdoc +38 -3
- data/Rakefile +6 -3
- data/bin/debride +1 -1
- data/bin/debride_rails_whitelist +1 -1
- data/bin/debride_rm +40 -70
- data/lib/debride.rb +38 -7
- data/test/test_debride.rb +22 -7
- data.tar.gz.sig +0 -0
- metadata +17 -20
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 31ff20d8c8b7d749e113ffd4eac634fa13c52e9c84461e52e92c07bbd98a40f1
|
4
|
+
data.tar.gz: dbeb5f7cc0129cc46f38f2a0b68d4b30d5b70d9f0dd7e3581a006e82adfcf2de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 293fc6a6d550e86d05a8d4784956fd1a886fea928b9b562a06502a0732e4f34af79aaebbd4f85ebe7aa9bc31fdb7281ec66487a73a2ef2853df467888197eac7
|
7
|
+
data.tar.gz: 9de34932869d721f0f2b98fd719ad0ef07d632d8588542cd4c1d4c3d5f7a57539dad80d858acfd2fb37b3a94b7d26f36ee8204e92a7cefeefd37e11653b9fe30
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/History.rdoc
CHANGED
@@ -1,3 +1,34 @@
|
|
1
|
+
=== 1.13.0 / 2025-06-10
|
2
|
+
|
3
|
+
* 2 minor enhancements:
|
4
|
+
|
5
|
+
* Added -y to debride_rm to opt-in to running autoclave.
|
6
|
+
* Print command for autoclave to help see what's happening.
|
7
|
+
|
8
|
+
* 1 bug fix:
|
9
|
+
|
10
|
+
* Fixed shebangs on all bin/* files, added -w for all.
|
11
|
+
|
12
|
+
=== 1.12.0 / 2023-05-18
|
13
|
+
|
14
|
+
* 1 major enhancement:
|
15
|
+
|
16
|
+
* Massive overhaul of bin/debride_rm: faster, cleaner, can run a command between each deletion.
|
17
|
+
|
18
|
+
* 2 minor enhancements:
|
19
|
+
|
20
|
+
* Added alias_method and alias as pseudo-calls to source method.
|
21
|
+
* Whitelist extended/included/prepended etc by default.
|
22
|
+
|
23
|
+
* 6 bug fixes:
|
24
|
+
|
25
|
+
* Added missing rails validation.
|
26
|
+
* Bumped sexp_processor and ruby_parser dependencies.
|
27
|
+
* Fix --exclude <dir> to properly exclude whole tree.
|
28
|
+
* Fixed --exclude option to make it repeatable.
|
29
|
+
* Fixed bug on anonymous block forwarding (eg fn(&)). (afuno)
|
30
|
+
* Use RubyParser.new instead of RubyParser.for_current_ruby.
|
31
|
+
|
1
32
|
=== 1.11.0 / 2023-03-24
|
2
33
|
|
3
34
|
* 6 minor enhancements:
|
data/README.rdoc
CHANGED
@@ -42,7 +42,7 @@ API), then you can whitelist it:
|
|
42
42
|
MyClass
|
43
43
|
bad_method lib/some/file.rb:20
|
44
44
|
...
|
45
|
-
|
45
|
+
|
46
46
|
Usage example for a typical rails application:
|
47
47
|
# dump rake routes into a file
|
48
48
|
% rake routes > routes.txt
|
@@ -53,13 +53,48 @@ Usage example for a typical rails application:
|
|
53
53
|
% echo down >> whitelist.txt
|
54
54
|
% echo change >> whitelist.txt
|
55
55
|
# output debride report co standard output with the following options:
|
56
|
-
# ignore typical rails methods,
|
56
|
+
# ignore typical rails methods,
|
57
57
|
# specify generated whitelist,
|
58
58
|
# run in current directory (".")
|
59
59
|
% debride --rails --whitelist whitelist.txt .
|
60
60
|
|
61
61
|
You can also use regexps in your whitelist by delimiting them with //'s.
|
62
62
|
|
63
|
+
To generate a whitelist for the last 28 days worth of logs on papertrail:
|
64
|
+
|
65
|
+
% seq 2 29 | xargs -I {} date -u -v-{}d +%Y-%m-%d | \
|
66
|
+
xargs -I {} curl --progress-bar -f --no-include -L -H "X-Papertrail-Token: $PAPERTRAIL_APIKEY" https://papertrailapp.com/api/v1/archives/{}/download | \
|
67
|
+
gzip -dc | grep production.log | cut -f 10- | \
|
68
|
+
debride_rails_whitelist routes.txt - | sort -u > whitelist.txt
|
69
|
+
|
70
|
+
== debride_rm
|
71
|
+
|
72
|
+
debride_rm will automatically remove dead code and optionally run a
|
73
|
+
command in between each removal. The command will automatically
|
74
|
+
substitute "NAME" and "PATH" with the name and path of the thing being
|
75
|
+
removed. Eg:
|
76
|
+
|
77
|
+
% debride_rm -C="git commit -m 'debride NAME in PATH' ." \
|
78
|
+
--rails \
|
79
|
+
--whitelist whitelist.txt \
|
80
|
+
--exclude test \
|
81
|
+
--exclude script \
|
82
|
+
--exclude bin \
|
83
|
+
--minimum 30
|
84
|
+
|
85
|
+
This command will:
|
86
|
+
|
87
|
+
1. run with rails extensions on
|
88
|
+
2. treat anything named in whitelist.txt as "called"
|
89
|
+
3. exclude directories that shouldn't be scanned or mutated
|
90
|
+
4. exclude anything under 30 lines long
|
91
|
+
|
92
|
+
One thing to note, debride_rm doesn't do terribly well with things
|
93
|
+
like attr_accessor lists, so running debride_rm with --minimum 2 (or
|
94
|
+
more) is wise.
|
95
|
+
|
96
|
+
Strategy: start large (40+) and work your way down.
|
97
|
+
|
63
98
|
== PLUGINS:
|
64
99
|
|
65
100
|
debride-erb :: Extends debride to analyze erb files (via erubis ala rails).
|
@@ -69,7 +104,7 @@ debride-slim :: Extends debride to analyze Slim files
|
|
69
104
|
|
70
105
|
== EDITOR INTEGRATION:
|
71
106
|
|
72
|
-
TextMate 2 :: * {Debride-Rails.tmbundle}[https://github.com/jjuliano/Debride-Rails.tmbundle] - Debride with Rails support
|
107
|
+
TextMate 2 :: * {Debride-Rails.tmbundle}[https://github.com/jjuliano/Debride-Rails.tmbundle] - Debride with Rails support
|
73
108
|
* {Debride.tmbundle}[https://github.com/jjuliano/Debride-Rails.tmbundle] - Debride for Ruby
|
74
109
|
|
75
110
|
== REQUIREMENTS:
|
data/Rakefile
CHANGED
@@ -7,6 +7,7 @@ Hoe::add_include_dirs("../../sexp_processor/dev/lib",
|
|
7
7
|
"../../ruby_parser/dev/lib",
|
8
8
|
"../../ruby2ruby/dev/lib",
|
9
9
|
"../../ZenTest/dev/lib",
|
10
|
+
"../../debride-erb/dev/lib",
|
10
11
|
"../../path_expander/dev/lib",
|
11
12
|
"lib")
|
12
13
|
|
@@ -19,8 +20,8 @@ Hoe.spec "debride" do
|
|
19
20
|
developer "Ryan Davis", "ryand-ruby@zenspider.com"
|
20
21
|
license "MIT"
|
21
22
|
|
22
|
-
dependency "sexp_processor", "~> 4.
|
23
|
-
dependency "ruby_parser", "~> 3.
|
23
|
+
dependency "sexp_processor", "~> 4.17"
|
24
|
+
dependency "ruby_parser", "~> 3.20"
|
24
25
|
dependency "path_expander", "~> 1.0"
|
25
26
|
end
|
26
27
|
|
@@ -28,7 +29,9 @@ def run dir, whitelist
|
|
28
29
|
abort "Specify dir to scan with D=<path>" unless dir
|
29
30
|
|
30
31
|
ENV["GEM_HOME"] = "tmp/isolate"
|
31
|
-
ENV["GEM_PATH"] = "
|
32
|
+
ENV["GEM_PATH"] = "#{Gem.paths.path.join ":"}:../../debride-erb/dev/tmp/isolate"
|
33
|
+
|
34
|
+
Gem.paths = ENV
|
32
35
|
|
33
36
|
whitelist = whitelist && ["--whitelist", whitelist]
|
34
37
|
verbose = ENV["V"] && "-v"
|
data/bin/debride
CHANGED
data/bin/debride_rails_whitelist
CHANGED
data/bin/debride_rm
CHANGED
@@ -1,96 +1,66 @@
|
|
1
|
-
#!/usr/bin/ruby -
|
1
|
+
#!/usr/bin/env -S ruby -ws
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
$C ||= false # command to run between deletions
|
4
|
+
$y ||= false # yes, actually execute autoclave
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
require "set"
|
7
|
+
require_relative "../lib/debride"
|
8
8
|
|
9
|
-
|
9
|
+
def autoclave nuke, cmd
|
10
|
+
nuke.each do |path, lines_to_remove, klass, name|
|
11
|
+
warn "#{path} #{lines_to_remove} #{klass}##{name}"
|
10
12
|
|
11
|
-
|
12
|
-
opener = file[line-1]
|
13
|
-
|
14
|
-
case opener
|
15
|
-
when /^\s*def/
|
16
|
-
# do nothing
|
17
|
-
else # attr_accessor, etc
|
18
|
-
# warn " unsupported: #{opener.strip}"
|
19
|
-
skips += 1
|
20
|
-
next
|
21
|
-
end
|
22
|
-
|
23
|
-
leader = opener[/^\s+/]
|
24
|
-
end_line = file[line..-1].find_index { |l| l =~ /^#{leader}end/ }
|
25
|
-
|
26
|
-
if end_line then
|
27
|
-
end_line += line + 1
|
28
|
-
end_line += 1 while file[end_line] =~ /^\s*$/
|
29
|
-
end_line += 1 while file[end_line] =~ /^\s*alias.*?\b#{name}$/
|
30
|
-
end_line += 1 while file[end_line] =~ /^\s*$/
|
31
|
-
|
32
|
-
end_line.downto line do |i|
|
33
|
-
file.delete_at(i-1)
|
34
|
-
end
|
35
|
-
else
|
36
|
-
warn "NOT FOUND: ending for #{name} #{path}:#{line}"
|
37
|
-
end
|
38
|
-
end
|
13
|
+
file = File.foreach(path).with_index.map { |l, i| [i+1, l] }
|
39
14
|
|
40
15
|
File.open path, "w" do |f|
|
41
|
-
|
16
|
+
file.each do |idx, line|
|
17
|
+
# skip empty line after a removed line
|
18
|
+
next if line.chomp.empty? && lines_to_remove.include?(idx-1)
|
19
|
+
f.write line unless lines_to_remove.include? idx
|
20
|
+
end
|
42
21
|
end
|
43
|
-
end
|
44
|
-
|
45
|
-
print " skips = %3d" % skips if skips > 0
|
46
|
-
end
|
47
22
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
File.foreach path do |line|
|
54
|
-
case line
|
55
|
-
when /^ (\S+)\s+(\S+):(\d+)$/ then
|
56
|
-
name, path, line = $1, $2, $3.to_i
|
57
|
-
nuke[path] << [line, name]
|
58
|
-
count += 1
|
59
|
-
when /^[\w:]+$/, "\n", /:$/ then
|
60
|
-
# ignore
|
61
|
-
else
|
62
|
-
warn "unparsed: #{line.chomp}"
|
23
|
+
if cmd then
|
24
|
+
expanded = cmd.gsub(/\bNAME\b/, "#{klass}##{name}").gsub(/\bPATH\b/, path)
|
25
|
+
warn "CMD = %p" % [expanded]
|
26
|
+
`#{expanded}` if $y
|
63
27
|
end
|
64
28
|
end
|
65
|
-
|
66
|
-
nuke.each do |k, ary|
|
67
|
-
nuke[k] = ary.sort.reverse
|
68
|
-
end
|
69
|
-
|
70
|
-
[nuke, count]
|
71
29
|
end
|
72
30
|
|
73
31
|
iter = 0
|
74
32
|
old_count = nil
|
75
33
|
|
76
|
-
abort "usage: #{$0} [debride args]+" if ARGV.empty? or ARGV.include? "-h"
|
34
|
+
abort "usage: #{$0} [-y] [-C=cmd] [debride args]+" if ARGV.empty? or ARGV.include? "-h"
|
77
35
|
|
78
|
-
|
36
|
+
warn "NOT running commands, use -y to execute" unless $y
|
79
37
|
|
80
38
|
loop do
|
81
39
|
iter += 1
|
82
|
-
dead = "dead%02d.txt" % iter
|
83
|
-
cmd[-1] = dead
|
84
40
|
|
85
|
-
|
86
|
-
|
41
|
+
debride = Debride.run ARGV.dup
|
42
|
+
|
43
|
+
min = debride.option[:minimum] || 0
|
44
|
+
|
45
|
+
nuke = debride.missing_locations
|
46
|
+
.flat_map { |klass, meths|
|
47
|
+
meths
|
48
|
+
.reject { |(meth, loc)| !loc }
|
49
|
+
.map { |(meth, loc)|
|
50
|
+
path, start, finish = /^(.+):(\d+)(?:-(\d+))?$/.match(loc).captures
|
51
|
+
finish ||= start
|
52
|
+
[path, start.to_i..finish.to_i, klass, meth]
|
53
|
+
}
|
54
|
+
.reject { |p,r,k,m| r.size <= min }
|
55
|
+
}
|
56
|
+
.sort_by { |p,r,k,m| [p, -r.begin, m] }
|
87
57
|
|
88
|
-
|
58
|
+
count = nuke.size
|
89
59
|
|
90
|
-
break if old_count == count
|
60
|
+
break if count.zero? || old_count == count
|
91
61
|
old_count = count
|
92
62
|
|
93
|
-
|
94
|
-
autoclave nuke
|
63
|
+
puts "iter = %2d count = %4d" % [iter, count]
|
64
|
+
autoclave nuke, $C
|
95
65
|
puts
|
96
66
|
end
|
data/lib/debride.rb
CHANGED
@@ -12,7 +12,7 @@ require "path_expander"
|
|
12
12
|
# A static code analyzer that points out possible dead methods.
|
13
13
|
|
14
14
|
class Debride < MethodBasedSexpProcessor
|
15
|
-
VERSION = "1.
|
15
|
+
VERSION = "1.13.0" # :nodoc:
|
16
16
|
PROJECT = "debride"
|
17
17
|
|
18
18
|
def self.load_plugins proj = PROJECT
|
@@ -56,7 +56,7 @@ class Debride < MethodBasedSexpProcessor
|
|
56
56
|
expander = PathExpander.new(args, glob)
|
57
57
|
files = expander.process
|
58
58
|
excl = debride.option[:exclude]
|
59
|
-
excl.map! { |fd| File.directory?(fd) ? "#{fd}
|
59
|
+
excl.map! { |fd| File.directory?(fd) ? "#{fd}/**/*" : fd } if excl
|
60
60
|
|
61
61
|
files = expander.filter_files files, StringIO.new(excl.join "\n") if excl
|
62
62
|
|
@@ -97,8 +97,7 @@ class Debride < MethodBasedSexpProcessor
|
|
97
97
|
raise "Unhandled type: #{path_or_io.class}:#{path_or_io.inspect}"
|
98
98
|
end
|
99
99
|
|
100
|
-
|
101
|
-
rp.process(file, path, option[:timeout])
|
100
|
+
RubyParser.new.process(file, path, option[:timeout])
|
102
101
|
rescue Racc::ParseError, RegexpError => e
|
103
102
|
warn "Parse Error parsing #{path}. Skipping."
|
104
103
|
warn " #{e.message}"
|
@@ -111,7 +110,15 @@ class Debride < MethodBasedSexpProcessor
|
|
111
110
|
|
112
111
|
def self.parse_options args
|
113
112
|
options = {
|
114
|
-
:whitelist => [
|
113
|
+
:whitelist => %i[
|
114
|
+
extended
|
115
|
+
included
|
116
|
+
inherited
|
117
|
+
method_added
|
118
|
+
method_missing
|
119
|
+
prepended
|
120
|
+
],
|
121
|
+
:exclude => [],
|
115
122
|
:format => :text,
|
116
123
|
}
|
117
124
|
|
@@ -129,7 +136,7 @@ class Debride < MethodBasedSexpProcessor
|
|
129
136
|
end
|
130
137
|
|
131
138
|
opts.on("-e", "--exclude FILE1,FILE2,ETC", Array, "Exclude files or directories in comma-separated list.") do |list|
|
132
|
-
options[:exclude]
|
139
|
+
options[:exclude].concat list
|
133
140
|
end
|
134
141
|
|
135
142
|
opts.on("-w", "--whitelist FILE", String, "Whitelist these messages.") do |s|
|
@@ -334,6 +341,17 @@ class Debride < MethodBasedSexpProcessor
|
|
334
341
|
method_name = method_name.to_s.delete_suffix("_path").to_sym if option[:rails]
|
335
342
|
when /^deliver_/ then
|
336
343
|
method_name = method_name.to_s.delete_prefix("deliver_").to_sym if option[:rails]
|
344
|
+
when :alias_method then
|
345
|
+
_, _, _, lhs, rhs = sexp
|
346
|
+
|
347
|
+
if Sexp === lhs and Sexp === rhs then
|
348
|
+
lhs = lhs.last
|
349
|
+
rhs = rhs.last
|
350
|
+
|
351
|
+
record_method lhs, sexp.file, sexp.line
|
352
|
+
|
353
|
+
called << rhs
|
354
|
+
end
|
337
355
|
end
|
338
356
|
|
339
357
|
called << method_name
|
@@ -343,9 +361,21 @@ class Debride < MethodBasedSexpProcessor
|
|
343
361
|
sexp
|
344
362
|
end
|
345
363
|
|
364
|
+
def process_alias exp
|
365
|
+
_, (_, lhs), (_, rhs) = exp
|
366
|
+
|
367
|
+
record_method lhs, exp.file, exp.line
|
368
|
+
|
369
|
+
called << rhs
|
370
|
+
|
371
|
+
exp
|
372
|
+
end
|
373
|
+
|
346
374
|
def process_block_pass exp # :nodoc:
|
347
375
|
_, name = exp
|
348
376
|
|
377
|
+
return exp unless name
|
378
|
+
|
349
379
|
case name.sexp_type
|
350
380
|
when :lit then # eg &:to_sym
|
351
381
|
called << name.last
|
@@ -576,7 +606,7 @@ class Debride < MethodBasedSexpProcessor
|
|
576
606
|
:around_action,
|
577
607
|
:before_action,
|
578
608
|
|
579
|
-
# https://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
|
609
|
+
# https://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html (at bottom)
|
580
610
|
:after_commit,
|
581
611
|
:after_create,
|
582
612
|
:after_destroy,
|
@@ -610,6 +640,7 @@ class Debride < MethodBasedSexpProcessor
|
|
610
640
|
:validates,
|
611
641
|
:validates_absence_of,
|
612
642
|
:validates_acceptance_of,
|
643
|
+
:validates_comparison_of,
|
613
644
|
:validates_confirmation_of,
|
614
645
|
:validates_exclusion_of,
|
615
646
|
:validates_format_of,
|
data/test/test_debride.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require "minitest/autorun"
|
2
2
|
require "debride"
|
3
3
|
|
4
|
+
$: << "../../debride-erb/dev/tmp/isolate"
|
5
|
+
|
4
6
|
class SafeDebride < Debride
|
5
7
|
def self.abort s
|
6
8
|
raise s
|
@@ -9,9 +11,9 @@ end
|
|
9
11
|
|
10
12
|
class TestDebride < Minitest::Test
|
11
13
|
EXP_LIST = [["Debride",
|
12
|
-
[:
|
14
|
+
[:process_alias,
|
15
|
+
:process_attrasgn,
|
13
16
|
:process_block_pass,
|
14
|
-
:process_call,
|
15
17
|
:process_cdecl,
|
16
18
|
:process_colon2,
|
17
19
|
:process_colon3,
|
@@ -20,6 +22,7 @@ class TestDebride < Minitest::Test
|
|
20
22
|
:process_defs,
|
21
23
|
:process_op_asgn2,
|
22
24
|
:process_rb,
|
25
|
+
:process_safe_call,
|
23
26
|
:report,
|
24
27
|
:report_json,
|
25
28
|
:report_text,
|
@@ -31,10 +34,14 @@ class TestDebride < Minitest::Test
|
|
31
34
|
|
32
35
|
EXP_FORMATTED = { :missing => formatted_vals }
|
33
36
|
|
37
|
+
make_my_diffs_pretty!
|
38
|
+
|
34
39
|
def assert_option arg, exp_arg, exp_opt
|
35
40
|
opt = SafeDebride.parse_options arg
|
36
41
|
|
37
|
-
|
42
|
+
wl = [:extended, :included, :inherited, :method_added, :method_missing, :prepended]
|
43
|
+
|
44
|
+
exp_opt = {:whitelist => wl, :exclude => [], :format => :text}.merge exp_opt
|
38
45
|
assert_equal exp_opt, opt
|
39
46
|
assert_equal exp_arg, arg
|
40
47
|
end
|
@@ -143,7 +150,7 @@ class TestDebride < Minitest::Test
|
|
143
150
|
debride.report(io)
|
144
151
|
|
145
152
|
exp = JSON.load JSON.dump EXP_FORMATTED # force stringify
|
146
|
-
data = JSON.load io.string.gsub(
|
153
|
+
data = JSON.load io.string.gsub(/:\d+(-\d+)?/, ":###")
|
147
154
|
|
148
155
|
assert_equal exp, data
|
149
156
|
end
|
@@ -155,7 +162,7 @@ class TestDebride < Minitest::Test
|
|
155
162
|
debride.report(io)
|
156
163
|
|
157
164
|
exp = EXP_FORMATTED
|
158
|
-
data = YAML.load io.string.gsub(
|
165
|
+
data = YAML.load io.string.gsub(/:\d+(-\d+)?/, ":###")
|
159
166
|
|
160
167
|
assert_equal exp, data
|
161
168
|
end
|
@@ -334,6 +341,14 @@ class TestDebride < Minitest::Test
|
|
334
341
|
assert_process [["Seattle", [:uncalled]]], ruby
|
335
342
|
end
|
336
343
|
|
344
|
+
def test_block_pass_empty
|
345
|
+
ruby = <<-RUBY.strip
|
346
|
+
f(&) # block forwarding
|
347
|
+
RUBY
|
348
|
+
|
349
|
+
assert_process [], ruby
|
350
|
+
end
|
351
|
+
|
337
352
|
def test_safe_navigation_operator
|
338
353
|
ruby = <<-RUBY.strip
|
339
354
|
class Seattle
|
@@ -500,8 +515,8 @@ class TestDebride < Minitest::Test
|
|
500
515
|
"AttributeAccessor#w4=" => "(io):3",
|
501
516
|
"AttributeAccessor#r1" => "(io):4",
|
502
517
|
"AttributeAccessor#r2" => "(io):4",
|
503
|
-
"AttributeAccessor#initialize" => "(io):5-
|
504
|
-
"AttributeAccessor::class_method" => "(io):12-
|
518
|
+
"AttributeAccessor#initialize" => "(io):5-10",
|
519
|
+
"AttributeAccessor::class_method" => "(io):12-14"
|
505
520
|
}
|
506
521
|
|
507
522
|
assert_equal exp, d.method_locations
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: debride
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Davis
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain:
|
11
10
|
- |
|
12
11
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
12
|
+
MIIDPjCCAiagAwIBAgIBCTANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
|
14
13
|
ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
|
15
|
-
|
14
|
+
GRYDY29tMB4XDTI1MDEwNjIzMjcwMVoXDTI2MDEwNjIzMjcwMVowRTETMBEGA1UE
|
16
15
|
AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
|
17
16
|
JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
|
18
17
|
b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
|
@@ -22,14 +21,14 @@ cert_chain:
|
|
22
21
|
qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
|
23
22
|
gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
|
24
23
|
HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBCwUAA4IB
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
24
|
+
AQAC0WQJcPOWPFwkojhzweilRVjTJ19UiLhiBTw3C1wJO3LVdBkWDmnnhAmKuX4D
|
25
|
+
r7vjQvESlABGIPdutI1Yl7mrHQzTkfLfXvNN6MT0nLChPyIYauT6SZZxubwJrUfA
|
26
|
+
7R0c2CJTIboZ0XaGpLsXqHEF1c29H7TV1QvVuqKAN2mCjh4N82QVn+ZKtys28AwT
|
27
|
+
6GfQX2fqLoi4KSc7xIzHKaNzqxeOICmJofk9w5VZ2rRN6yes8jvFYwz9HR41wdj8
|
28
|
+
bwfinv7Yp5fA6AysuZLhCykyfDuZVRrUp0Vb68YCKsLjJly/Theak+euNTxvHsB+
|
29
|
+
al9oSgPPHICMEX65qvLywitx
|
31
30
|
-----END CERTIFICATE-----
|
32
|
-
date:
|
31
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
33
32
|
dependencies:
|
34
33
|
- !ruby/object:Gem::Dependency
|
35
34
|
name: sexp_processor
|
@@ -37,28 +36,28 @@ dependencies:
|
|
37
36
|
requirements:
|
38
37
|
- - "~>"
|
39
38
|
- !ruby/object:Gem::Version
|
40
|
-
version: '4.
|
39
|
+
version: '4.17'
|
41
40
|
type: :runtime
|
42
41
|
prerelease: false
|
43
42
|
version_requirements: !ruby/object:Gem::Requirement
|
44
43
|
requirements:
|
45
44
|
- - "~>"
|
46
45
|
- !ruby/object:Gem::Version
|
47
|
-
version: '4.
|
46
|
+
version: '4.17'
|
48
47
|
- !ruby/object:Gem::Dependency
|
49
48
|
name: ruby_parser
|
50
49
|
requirement: !ruby/object:Gem::Requirement
|
51
50
|
requirements:
|
52
51
|
- - "~>"
|
53
52
|
- !ruby/object:Gem::Version
|
54
|
-
version: '3.
|
53
|
+
version: '3.20'
|
55
54
|
type: :runtime
|
56
55
|
prerelease: false
|
57
56
|
version_requirements: !ruby/object:Gem::Requirement
|
58
57
|
requirements:
|
59
58
|
- - "~>"
|
60
59
|
- !ruby/object:Gem::Version
|
61
|
-
version: '3.
|
60
|
+
version: '3.20'
|
62
61
|
- !ruby/object:Gem::Dependency
|
63
62
|
name: path_expander
|
64
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,14 +112,14 @@ dependencies:
|
|
113
112
|
requirements:
|
114
113
|
- - "~>"
|
115
114
|
- !ruby/object:Gem::Version
|
116
|
-
version: '4.
|
115
|
+
version: '4.2'
|
117
116
|
type: :development
|
118
117
|
prerelease: false
|
119
118
|
version_requirements: !ruby/object:Gem::Requirement
|
120
119
|
requirements:
|
121
120
|
- - "~>"
|
122
121
|
- !ruby/object:Gem::Version
|
123
|
-
version: '4.
|
122
|
+
version: '4.2'
|
124
123
|
description: Analyze code for potentially uncalled / dead methods, now with auto-removal.
|
125
124
|
email:
|
126
125
|
- ryand-ruby@zenspider.com
|
@@ -149,7 +148,6 @@ licenses:
|
|
149
148
|
- MIT
|
150
149
|
metadata:
|
151
150
|
homepage_uri: https://github.com/seattlerb/debride
|
152
|
-
post_install_message:
|
153
151
|
rdoc_options:
|
154
152
|
- "--main"
|
155
153
|
- README.rdoc
|
@@ -166,8 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
164
|
- !ruby/object:Gem::Version
|
167
165
|
version: '0'
|
168
166
|
requirements: []
|
169
|
-
rubygems_version: 3.
|
170
|
-
signing_key:
|
167
|
+
rubygems_version: 3.6.9
|
171
168
|
specification_version: 4
|
172
169
|
summary: Analyze code for potentially uncalled / dead methods, now with auto-removal.
|
173
170
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|