quality 3.1.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -2
- data/lib/quality/rake/task.rb +37 -91
- data/lib/quality/runner.rb +105 -0
- data/lib/quality/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f2ac78c5cf2ce1a7ffa14ae0620ee589e46ea5d
|
4
|
+
data.tar.gz: 77dbfa0aa0fcb5f7dc6e44bc59dc6b102942fb00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7a48e534105dfc33ac3f9eaad04ba799930d608c1e9850b469abf06f0d1f321f30f2594d21e318d09c40ca9970d989c50d6b65e58065831c0963b5f4f372a22
|
7
|
+
data.tar.gz: 95d993d5dc101127934b8aa407d765cdc8dcb133d2db0943a978f7e64ea18a651324efc94557ba546b5957c24e7fc156efe54cd60c9176b58c863b74ac5adc79
|
data/README.md
CHANGED
@@ -72,8 +72,13 @@ Quality::Rake::Task.new { |t|
|
|
72
72
|
|
73
73
|
# Array of directory names which contain ruby files to analyze.
|
74
74
|
#
|
75
|
-
# Defaults to %w
|
76
|
-
t.ruby_dirs = %w
|
75
|
+
# Defaults to %w(app lib test spec feature), which translates to *.rb in the base directory, as well as those directories.
|
76
|
+
t.ruby_dirs = %w(app lib test spec feature)
|
77
|
+
|
78
|
+
# Array of directory names which contain any type of source files to analyze.
|
79
|
+
#
|
80
|
+
# Defaults to t.ruby_dirs
|
81
|
+
t.source_dirs.concat(%w(MyProject MyProjectTests))
|
77
82
|
|
78
83
|
# Relative path to output directory where *_high_water_mark
|
79
84
|
# files will be read/written
|
data/lib/quality/rake/task.rb
CHANGED
@@ -3,13 +3,8 @@
|
|
3
3
|
require 'rake'
|
4
4
|
require 'rake/tasklib'
|
5
5
|
require 'rbconfig'
|
6
|
+
require_relative '../runner'
|
6
7
|
require_relative '../quality_checker'
|
7
|
-
require_relative '../tools/cane'
|
8
|
-
require_relative '../tools/flay'
|
9
|
-
require_relative '../tools/flog'
|
10
|
-
require_relative '../tools/reek'
|
11
|
-
require_relative '../tools/rubocop'
|
12
|
-
require_relative '../tools/bigfiles'
|
13
8
|
|
14
9
|
module Quality
|
15
10
|
#
|
@@ -30,13 +25,6 @@ module Quality
|
|
30
25
|
#
|
31
26
|
# rake quality
|
32
27
|
class Task < ::Rake::TaskLib
|
33
|
-
include Tools::Cane
|
34
|
-
include Tools::Flay
|
35
|
-
include Tools::Flog
|
36
|
-
include Tools::Reek
|
37
|
-
include Tools::Rubocop
|
38
|
-
include Tools::BigFiles
|
39
|
-
|
40
28
|
# Name of quality task.
|
41
29
|
# Defaults to :quality.
|
42
30
|
attr_accessor :quality_name
|
@@ -61,11 +49,17 @@ module Quality
|
|
61
49
|
# the base directory, as well as those directories.
|
62
50
|
attr_writer :ruby_dirs
|
63
51
|
|
52
|
+
# Array of directory names which contain any type of source
|
53
|
+
# files to analyze.
|
54
|
+
#
|
55
|
+
# Defaults to the same as ruby_dirs
|
56
|
+
attr_writer :source_dirs
|
57
|
+
|
64
58
|
# Relative path to output directory where *_high_water_mark
|
65
59
|
# files will be read/written
|
66
60
|
#
|
67
61
|
# Defaults to .
|
68
|
-
|
62
|
+
attr_accessor :output_dir
|
69
63
|
|
70
64
|
# Defines a new task, using the name +name+.
|
71
65
|
def initialize(dsl: ::Rake::Task,
|
@@ -79,10 +73,8 @@ module Quality
|
|
79
73
|
Quality::QualityChecker,
|
80
74
|
quality_name: 'quality',
|
81
75
|
ratchet_name: 'ratchet')
|
82
|
-
@dsl, @cmd_runner
|
83
|
-
@
|
84
|
-
@configuration_writer = configuration_writer
|
85
|
-
@quality_checker_class = quality_checker_class
|
76
|
+
@dsl, @cmd_runner = dsl, cmd_runner
|
77
|
+
@globber = globber
|
86
78
|
@quality_name, @ratchet_name = quality_name, ratchet_name
|
87
79
|
|
88
80
|
@skip_tools = []
|
@@ -93,87 +85,29 @@ module Quality
|
|
93
85
|
|
94
86
|
yield self if block_given?
|
95
87
|
|
88
|
+
@runner = Quality::Runner.new(self,
|
89
|
+
gem_spec: gem_spec,
|
90
|
+
quality_checker_class:
|
91
|
+
quality_checker_class,
|
92
|
+
count_io: count_io,
|
93
|
+
count_file: count_file,
|
94
|
+
configuration_writer:
|
95
|
+
configuration_writer)
|
96
96
|
define
|
97
97
|
end
|
98
98
|
|
99
|
-
|
100
|
-
|
101
|
-
def define # :nodoc:
|
102
|
-
desc 'Verify quality has increased or stayed ' \
|
103
|
-
'the same' unless ::Rake.application.last_comment
|
104
|
-
@dsl.define_task(quality_name) { run_quality }
|
105
|
-
@dsl.define_task(ratchet_name) { run_ratchet }
|
106
|
-
tools.each do |tool|
|
107
|
-
@dsl.define_task(tool) { run_quality_with_tool(tool) }
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def tools
|
112
|
-
self.class.ancestors.map do |ancestor|
|
113
|
-
ancestor_name = ancestor.to_s
|
114
|
-
next unless ancestor_name.start_with?('Quality::Tools::')
|
115
|
-
ancestor_name.split('::').last.downcase
|
116
|
-
end.compact
|
117
|
-
end
|
118
|
-
|
119
|
-
def run_quality
|
120
|
-
tools.each do |tool|
|
121
|
-
run_quality_with_tool(tool)
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def run_quality_with_tool(tool)
|
126
|
-
installed = @gem_spec.find_all_by_name(tool).any?
|
127
|
-
suppressed = @skip_tools.include? tool
|
128
|
-
|
129
|
-
if installed && !suppressed
|
130
|
-
method("quality_#{tool}".to_sym).call
|
131
|
-
elsif !installed
|
132
|
-
puts "#{tool} not installed"
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def run_ratchet
|
137
|
-
@globber.glob("#{@output_dir}/*_high_water_mark").each do |filename|
|
138
|
-
run_ratchet_on_file(filename)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
def run_ratchet_on_file(filename)
|
143
|
-
puts "Processing #{filename}"
|
144
|
-
existing_violations = count_existing_violations(filename)
|
145
|
-
new_violations = [0, existing_violations - 1].max
|
146
|
-
write_violations(filename, new_violations)
|
147
|
-
end
|
148
|
-
|
149
|
-
def write_violations(filename, new_violations)
|
150
|
-
@count_file.open(filename, 'w') do |file|
|
151
|
-
file.write(new_violations.to_s + "\n")
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
def count_existing_violations(filename)
|
156
|
-
existing_violations = @count_io.read(filename).to_i
|
157
|
-
fail("Problem with file #{filename}") if existing_violations < 0
|
158
|
-
existing_violations
|
159
|
-
end
|
160
|
-
|
161
|
-
def ratchet_quality_cmd(cmd,
|
162
|
-
command_options,
|
163
|
-
&count_violations_on_line)
|
164
|
-
quality_checker = @quality_checker_class.new(cmd,
|
165
|
-
command_options,
|
166
|
-
@output_dir,
|
167
|
-
verbose)
|
168
|
-
quality_checker.execute(&count_violations_on_line)
|
169
|
-
end
|
99
|
+
attr_reader :globber
|
170
100
|
|
171
101
|
def ruby_dirs
|
172
102
|
@ruby_dirs ||= %w(app lib test spec feature)
|
173
103
|
end
|
174
104
|
|
105
|
+
def source_dirs
|
106
|
+
@source_dirs ||= ruby_dirs.clone
|
107
|
+
end
|
108
|
+
|
175
109
|
def source_files_glob(extensions = 'rb,swift,cpp,c,java,py')
|
176
|
-
File.join("{#{
|
110
|
+
File.join("{#{source_dirs.join(',')}}",
|
177
111
|
'**', "*.{#{extensions}}")
|
178
112
|
end
|
179
113
|
|
@@ -182,9 +116,21 @@ module Quality
|
|
182
116
|
end
|
183
117
|
|
184
118
|
def ruby_files
|
185
|
-
@globber.glob('*.rb')
|
119
|
+
@globber.glob('{*.rb,Rakefile}')
|
186
120
|
.concat(@globber.glob(ruby_files_glob)).join(' ')
|
187
121
|
end
|
122
|
+
|
123
|
+
private
|
124
|
+
|
125
|
+
def define # :nodoc:
|
126
|
+
desc 'Verify quality has increased or stayed ' \
|
127
|
+
'the same' unless ::Rake.application.last_comment
|
128
|
+
@dsl.define_task(quality_name) { @runner.run_quality }
|
129
|
+
@dsl.define_task(ratchet_name) { @runner.run_ratchet }
|
130
|
+
@runner.tools.each do |tool|
|
131
|
+
@dsl.define_task(tool) { @runner.run_quality_with_tool(tool) }
|
132
|
+
end
|
133
|
+
end
|
188
134
|
end
|
189
135
|
end
|
190
136
|
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require_relative 'tools/cane'
|
2
|
+
require_relative 'tools/flay'
|
3
|
+
require_relative 'tools/flog'
|
4
|
+
require_relative 'tools/reek'
|
5
|
+
require_relative 'tools/rubocop'
|
6
|
+
require_relative 'tools/bigfiles'
|
7
|
+
|
8
|
+
module Quality
|
9
|
+
class Runner
|
10
|
+
include Tools::Cane
|
11
|
+
include Tools::Flay
|
12
|
+
include Tools::Flog
|
13
|
+
include Tools::Reek
|
14
|
+
include Tools::Rubocop
|
15
|
+
include Tools::BigFiles
|
16
|
+
|
17
|
+
def initialize(config,
|
18
|
+
gem_spec: Gem::Specification,
|
19
|
+
quality_checker_class: Quality::QualityChecker,
|
20
|
+
count_io: IO,
|
21
|
+
count_file: File,
|
22
|
+
configuration_writer: File)
|
23
|
+
@config = config
|
24
|
+
@gem_spec = gem_spec
|
25
|
+
@quality_checker_class = quality_checker_class
|
26
|
+
@count_io = count_io
|
27
|
+
@count_file = count_file
|
28
|
+
@configuration_writer = configuration_writer
|
29
|
+
end
|
30
|
+
|
31
|
+
def run_quality
|
32
|
+
tools.each { |tool| run_quality_with_tool(tool) }
|
33
|
+
end
|
34
|
+
|
35
|
+
def run_quality_with_tool(tool)
|
36
|
+
installed = @gem_spec.find_all_by_name(tool).any?
|
37
|
+
suppressed = @config.skip_tools.include? tool
|
38
|
+
|
39
|
+
if installed && !suppressed
|
40
|
+
method("quality_#{tool}".to_sym).call
|
41
|
+
elsif !installed
|
42
|
+
puts "#{tool} not installed"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def globber
|
47
|
+
@config.globber
|
48
|
+
end
|
49
|
+
|
50
|
+
def run_ratchet
|
51
|
+
globber.glob("#{@config.output_dir}/*_high_water_mark").each do |filename|
|
52
|
+
run_ratchet_on_file(filename)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def run_ratchet_on_file(filename)
|
57
|
+
puts "Processing #{filename}"
|
58
|
+
existing_violations = count_existing_violations(filename)
|
59
|
+
new_violations = [0, existing_violations - 1].max
|
60
|
+
write_violations(filename, new_violations)
|
61
|
+
end
|
62
|
+
|
63
|
+
def write_violations(filename, new_violations)
|
64
|
+
@count_file.open(filename, 'w') do |file|
|
65
|
+
file.write(new_violations.to_s + "\n")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def count_existing_violations(filename)
|
70
|
+
existing_violations = @count_io.read(filename).to_i
|
71
|
+
fail("Problem with file #{filename}") if existing_violations < 0
|
72
|
+
existing_violations
|
73
|
+
end
|
74
|
+
|
75
|
+
def tools
|
76
|
+
self.class.ancestors.map do |ancestor|
|
77
|
+
ancestor_name = ancestor.to_s
|
78
|
+
next unless ancestor_name.start_with?('Quality::Tools::')
|
79
|
+
ancestor_name.split('::').last.downcase
|
80
|
+
end.compact
|
81
|
+
end
|
82
|
+
|
83
|
+
def ratchet_quality_cmd(cmd,
|
84
|
+
command_options,
|
85
|
+
&count_violations_on_line)
|
86
|
+
quality_checker = @quality_checker_class.new(cmd,
|
87
|
+
command_options,
|
88
|
+
@config.output_dir,
|
89
|
+
@config.verbose)
|
90
|
+
quality_checker.execute(&count_violations_on_line)
|
91
|
+
end
|
92
|
+
|
93
|
+
def ruby_files
|
94
|
+
@config.ruby_files
|
95
|
+
end
|
96
|
+
|
97
|
+
def ruby_files_glob
|
98
|
+
@config.ruby_files_glob
|
99
|
+
end
|
100
|
+
|
101
|
+
def source_files_glob
|
102
|
+
@config.source_files_glob
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
data/lib/quality/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quality
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vince Broz
|
@@ -202,6 +202,7 @@ files:
|
|
202
202
|
- lib/quality/process_runner.rb
|
203
203
|
- lib/quality/quality_checker.rb
|
204
204
|
- lib/quality/rake/task.rb
|
205
|
+
- lib/quality/runner.rb
|
205
206
|
- lib/quality/tools/bigfiles.rb
|
206
207
|
- lib/quality/tools/cane.rb
|
207
208
|
- lib/quality/tools/flay.rb
|