quality_report 1.5.0 → 1.6.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
- data/.rubocop.yml +1 -1
- data/README.md +1 -1
- data/Rakefile +2 -2
- data/exe/ruby-quality-report +89 -6
- data/lib/quality_report/version.rb +1 -1
- data/lib/quality_report.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eb26bd22c7b99d601f0eca7648de96e15dc06ac06b405c887cca9c92e96d353f
|
4
|
+
data.tar.gz: 03bc3e1613cc9bdb6b84d123164ec213051054d5f05b9627ab57394ca9df721f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a35e38922d52d49f34d6e4269e76aa1e43820f7c3d22ab569aa92667397cf3a1b9b0bfeed46fbc188bf3fcf9911166c6ec8372f074c033272e378b21a9e3383
|
7
|
+
data.tar.gz: d841f2ecc4afc0bbefeacc3500be6132e976d82da5705759151527d8be64b03cfdb96083e2819eff1590d725d1f34e59b644c349bb6c08ef09146bf4e893211a
|
data/.rubocop.yml
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
AllCops:
|
2
|
-
TargetRubyVersion: 3.1
|
2
|
+
TargetRubyVersion: 3.1
|
data/README.md
CHANGED
data/Rakefile
CHANGED
data/exe/ruby-quality-report
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
+
require 'json'
|
5
|
+
require 'tty-option'
|
4
6
|
require 'tty-table'
|
5
7
|
require 'pastel'
|
6
8
|
|
@@ -43,17 +45,27 @@ def generate_csv(combined_stats)
|
|
43
45
|
.join("\n")
|
44
46
|
end
|
45
47
|
|
46
|
-
def generate_table(combined_stats)
|
47
|
-
|
48
|
-
|
48
|
+
def generate_table(combined_stats, colspec: {}, skip: '')
|
49
|
+
default_headings = ['Author', 'Percent Flagged', 'Flagged Lines', 'All lines']
|
50
|
+
static_heading = colspec.keys&.first # Handle just one column for now
|
51
|
+
all_headings = (default_headings + [static_heading]).compact
|
52
|
+
|
53
|
+
table = TTY::Table.new(header: all_headings)
|
54
|
+
table_data = generate_data(combined_stats).reject { should_skip?(_1) }
|
55
|
+
static_values = colspec[static_heading] || {}
|
49
56
|
|
50
57
|
table_data.each do |stats|
|
51
|
-
|
58
|
+
next if skip.include?(stats[:label])
|
59
|
+
|
60
|
+
new_row = [
|
52
61
|
{ value: stats[:label], alignment: :left },
|
53
62
|
{ value: "#{stats[:percent]}%", alignment: :right },
|
54
63
|
{ value: int_to_accounting(stats[:part_count]), alignment: :right },
|
55
64
|
{ value: int_to_accounting(stats[:whole_count]), alignment: :right }
|
56
65
|
]
|
66
|
+
new_row << { value: static_values[stats[:label]], alignment: :left } if static_heading
|
67
|
+
|
68
|
+
table << new_row
|
57
69
|
end
|
58
70
|
|
59
71
|
render_table(table, table_data)
|
@@ -126,11 +138,82 @@ def int_to_accounting(an_int)
|
|
126
138
|
an_int.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
|
127
139
|
end
|
128
140
|
|
141
|
+
#
|
142
|
+
# CLI Argument Parser
|
143
|
+
#
|
144
|
+
class Command
|
145
|
+
include TTY::Option
|
146
|
+
|
147
|
+
usage do
|
148
|
+
program 'ruby-quality-report'
|
149
|
+
no_command
|
150
|
+
header 'Ruby Quality Report'
|
151
|
+
desc <<~DESC
|
152
|
+
Generates a report of the percentage of flagged lines of code written by each author. For improved relevance, it excludes:
|
153
|
+
|
154
|
+
- authors with fewer than 200 lines of code
|
155
|
+
- authors with no commits in the previous 60 days
|
156
|
+
|
157
|
+
It runs a suite of Rubocop metrics on *.rb files recursively starting in the current directory. Then, using git, it calculates the percentage of warnings per line written, per author. Each failing check is another warning.
|
158
|
+
DESC
|
159
|
+
|
160
|
+
example <<~EXAMPLE1
|
161
|
+
Append a column showing office location. The order of the keys in the JSON does not matter:
|
162
|
+
$ ruby-quality-report -c '{"Location": {"Amy": "NYC", "Bob": "Remote"}}'
|
163
|
+
EXAMPLE1
|
164
|
+
|
165
|
+
example <<~EXAMPLE2
|
166
|
+
Skip one author:
|
167
|
+
$ ruby-quality-report --skip Cathy
|
168
|
+
EXAMPLE2
|
169
|
+
end
|
170
|
+
|
171
|
+
option :add_column do
|
172
|
+
long '--add-column JSON'
|
173
|
+
short '-c JSON'
|
174
|
+
desc 'Add a static column to the report. This is a simple way to add known information. See the examples.'
|
175
|
+
end
|
176
|
+
|
177
|
+
flag :skip do
|
178
|
+
long '--skip AUTHOR'
|
179
|
+
short '-s AUTHOR'
|
180
|
+
desc 'Filter out a git author'
|
181
|
+
end
|
182
|
+
|
183
|
+
flag :help do
|
184
|
+
short '-h'
|
185
|
+
long '--help'
|
186
|
+
desc 'Print this help'
|
187
|
+
end
|
188
|
+
|
189
|
+
def run
|
190
|
+
if params[:help]
|
191
|
+
print help
|
192
|
+
exit 1
|
193
|
+
elsif params.errors.any?
|
194
|
+
puts params.errors.summary
|
195
|
+
exit 1
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
129
200
|
#
|
130
201
|
# Execution begins here
|
131
202
|
#
|
203
|
+
|
204
|
+
command = Command.new
|
205
|
+
command.parse
|
206
|
+
command.run
|
207
|
+
|
208
|
+
add_column_param = command.params[:add_column]
|
209
|
+
colspec = add_column_param ? JSON.parse(add_column_param) : {}
|
210
|
+
puts "Adding column: #{colspec.keys.first}" unless colspec.empty?
|
211
|
+
|
212
|
+
skip = command.params[:skip] || ''
|
213
|
+
puts "Skipping author: #{skip}" if skip != ''
|
214
|
+
|
132
215
|
PART_STATS = `ruby-author-warnings | frequency-list`.freeze
|
133
|
-
WHOLE_STATS = `ruby-line-authors
|
216
|
+
WHOLE_STATS = `ruby-line-authors | frequency-list`.freeze
|
134
217
|
COMBINED_STATS = create_combined_stats(PART_STATS, WHOLE_STATS)
|
135
218
|
|
136
|
-
puts generate_table(COMBINED_STATS)
|
219
|
+
puts generate_table(COMBINED_STATS, colspec:, skip:)
|
data/lib/quality_report.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quality_report
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robb Shecter
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.68'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: tty-option
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.3.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.3.0
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: tty-table
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|