quality 20.1.0 → 20.1.1
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/{LICENSE.txt → License.txt} +0 -0
- data/README.md +16 -1
- data/lib/quality/config.rb +1 -1
- data/lib/quality/directory_of_classes.rb +44 -0
- data/lib/quality/quality_checker.rb +5 -7
- data/lib/quality/ruby_spawn.rb +2 -2
- data/lib/quality/runner.rb +9 -25
- data/lib/quality/tools/bigfiles.rb +1 -1
- data/lib/quality/tools/bundler_audit.rb +18 -0
- data/lib/quality/tools/cane.rb +1 -1
- data/lib/quality/tools/flog.rb +4 -4
- data/lib/quality/tools/punchlist.rb +1 -1
- data/lib/quality/tools/rails_best_practices.rb +4 -4
- data/lib/quality/tools/reek.rb +4 -4
- data/lib/quality/tools/rubocop.rb +4 -4
- data/lib/quality/version.rb +1 -1
- data/quality.gemspec +2 -0
- metadata +33 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 00e2023f6cecd2f6706b0a7260112d8fe713a510
|
|
4
|
+
data.tar.gz: 5f0d6b1824039886ddc6f08a619a33cd0926df00
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8e39a1ea2afb06be8f312dd584c926eac633cfb25e55f00610efd25fafff3bf9a41ce7394c7b7d89c8ea092e0b4f0fcaf98fbb2d69753d6ca604abf4ae7dabe4
|
|
7
|
+
data.tar.gz: b0af83671b719e431579f93f8630ada3ec021dcc65f7e099c94aac8e56d96fce3e96ea3079609b119cc1e7e7c2c58eb5b2e61ad9f9416195070f14aa5c348fff
|
data/{LICENSE.txt → License.txt}
RENAMED
|
File without changes
|
data/README.md
CHANGED
|
@@ -14,7 +14,22 @@ worse over time.
|
|
|
14
14
|
|
|
15
15
|
See [this post](http://blog.apiology.cc/2014/06/scalable-quality-part-1.html) or [these slides](https://docs.google.com/presentation/d/1Op4FH34-enm8luEIuAAVLkuAJ-sB4LKaMm57RJzvfeI/edit#slide) for more information on the problem the quality gem solves.
|
|
16
16
|
|
|
17
|
-
##How to use
|
|
17
|
+
## How to use - using Docker
|
|
18
|
+
|
|
19
|
+
These basic steps assume you have a working Docker installation.
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
docker run -v `pwd`:/usr/app apiology/quality
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
If you'd like to customize, you can link in your own Rakefile like this:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
docker run -v `pwd`:/usr/app -v `pwd`/Rakefile.quality:/usr/quality/Rakefile apiology/quality
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
## How to use - as part of a Ruby-based Rakefile
|
|
18
33
|
|
|
19
34
|
```bash
|
|
20
35
|
$ gem install quality
|
data/lib/quality/config.rb
CHANGED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'active_support'
|
|
2
|
+
require 'active_support/core_ext'
|
|
3
|
+
|
|
4
|
+
# Represents a source directory full of classe - e.g.,
|
|
5
|
+
# lib/vincelifedaily/checks/*
|
|
6
|
+
class DirectoryOfClasses
|
|
7
|
+
attr_reader :dir, :module_name
|
|
8
|
+
|
|
9
|
+
def initialize(dir: raise, class_suffix: '', module_name: '')
|
|
10
|
+
@dir = dir
|
|
11
|
+
@class_suffix = class_suffix
|
|
12
|
+
@module_name = module_name
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def filenames
|
|
16
|
+
Dir.glob("#{dir}/**.rb").sort
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def basenames
|
|
20
|
+
filenames.map { |filename| File.basename(filename) }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def basenames_without_extension
|
|
24
|
+
filenames.map { |filename| File.basename(filename, '.*') }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def require_classes
|
|
28
|
+
basenames.each do |basename|
|
|
29
|
+
path = "#{dir}/#{basename}"
|
|
30
|
+
require_relative path
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def symbols_and_classes
|
|
35
|
+
@symbols_and_classes ||= filenames.map do |filename|
|
|
36
|
+
basename = File.basename(filename, '.rb')
|
|
37
|
+
|
|
38
|
+
class_name = "#{module_name}::#{basename.camelize}#{@class_suffix}"
|
|
39
|
+
clazz = class_name.constantize
|
|
40
|
+
symbol = basename.to_sym
|
|
41
|
+
[symbol, clazz]
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -55,8 +55,8 @@ module Quality
|
|
|
55
55
|
def check_exit_status(exit_status)
|
|
56
56
|
return if @command_options[:gives_error_code_on_violations] ||
|
|
57
57
|
@command_options[:gives_error_code_on_no_relevant_code]
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
raise("Error detected running #{full_cmd}. " \
|
|
59
|
+
"Exit status is #{exit_status}") if exit_status.nonzero?
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
def existing_violations
|
|
@@ -71,9 +71,9 @@ module Quality
|
|
|
71
71
|
existing = existing_violations
|
|
72
72
|
report_violations(existing)
|
|
73
73
|
if @violations > existing
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
raise("Output from #{@cmd}\n\n#{@command_output}\n\n" \
|
|
75
|
+
"Reduce total number of #{@cmd} violations " \
|
|
76
|
+
"to #{existing} or below!")
|
|
77
77
|
elsif @violations < existing
|
|
78
78
|
puts 'Ratcheting quality up...'
|
|
79
79
|
write_violations(@violations)
|
|
@@ -85,8 +85,6 @@ module Quality
|
|
|
85
85
|
puts "Found #{@violations} #{@cmd} violations"
|
|
86
86
|
end
|
|
87
87
|
|
|
88
|
-
private
|
|
89
|
-
|
|
90
88
|
def full_cmd
|
|
91
89
|
args = @command_options[:args] || ''
|
|
92
90
|
@found_output = false
|
data/lib/quality/ruby_spawn.rb
CHANGED
data/lib/quality/runner.rb
CHANGED
|
@@ -1,35 +1,19 @@
|
|
|
1
1
|
require 'active_support/inflector'
|
|
2
2
|
require 'forwardable'
|
|
3
3
|
require_relative 'which'
|
|
4
|
-
require_relative '
|
|
5
|
-
require_relative 'tools/flay'
|
|
6
|
-
require_relative 'tools/flog'
|
|
7
|
-
require_relative 'tools/reek'
|
|
8
|
-
require_relative 'tools/rubocop'
|
|
9
|
-
require_relative 'tools/bigfiles'
|
|
10
|
-
require_relative 'tools/pep8'
|
|
11
|
-
require_relative 'tools/punchlist'
|
|
12
|
-
require_relative 'tools/brakeman'
|
|
13
|
-
require_relative 'tools/rails_best_practices'
|
|
14
|
-
require_relative 'tools/eslint'
|
|
15
|
-
require_relative 'tools/jscs'
|
|
4
|
+
require_relative 'directory_of_classes'
|
|
16
5
|
|
|
17
6
|
module Quality
|
|
7
|
+
current_dir = File.dirname(File.expand_path(__FILE__))
|
|
8
|
+
TOOL_CLASSES = DirectoryOfClasses.new(dir: "#{current_dir}/tools",
|
|
9
|
+
module_name: 'Quality::Tools')
|
|
10
|
+
ALL_TOOLS = TOOL_CLASSES.basenames_without_extension
|
|
11
|
+
TOOL_CLASSES.require_classes
|
|
12
|
+
|
|
18
13
|
# Knows how to run different quality tools based on a configuration
|
|
19
14
|
# already determined.
|
|
20
15
|
class Runner
|
|
21
|
-
include
|
|
22
|
-
include Tools::Flay
|
|
23
|
-
include Tools::Flog
|
|
24
|
-
include Tools::Reek
|
|
25
|
-
include Tools::Rubocop
|
|
26
|
-
include Tools::Bigfiles
|
|
27
|
-
include Tools::Pep8
|
|
28
|
-
include Tools::Punchlist
|
|
29
|
-
include Tools::Brakeman
|
|
30
|
-
include Tools::RailsBestPractices
|
|
31
|
-
include Tools::Eslint
|
|
32
|
-
include Tools::Jscs
|
|
16
|
+
TOOL_CLASSES.symbols_and_classes.each { |_symbol, clazz| include clazz }
|
|
33
17
|
|
|
34
18
|
extend ::Forwardable
|
|
35
19
|
|
|
@@ -84,7 +68,7 @@ module Quality
|
|
|
84
68
|
|
|
85
69
|
def count_existing_violations(filename)
|
|
86
70
|
existing_violations = @count_io.read(filename).to_i
|
|
87
|
-
|
|
71
|
+
raise("Problem with file #{filename}") if existing_violations < 0
|
|
88
72
|
existing_violations
|
|
89
73
|
end
|
|
90
74
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Quality
|
|
2
|
+
module Tools
|
|
3
|
+
# Adds 'bundler_audit' tool support to quality gem
|
|
4
|
+
module BundlerAudit
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
def quality_bundler_audit
|
|
8
|
+
ratchet_quality_cmd('bundle-audit', args: '') do |line|
|
|
9
|
+
if line =~ /^Name: /
|
|
10
|
+
1
|
|
11
|
+
else
|
|
12
|
+
0
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/lib/quality/tools/cane.rb
CHANGED
data/lib/quality/tools/flog.rb
CHANGED
|
@@ -2,6 +2,10 @@ module Quality
|
|
|
2
2
|
module Tools
|
|
3
3
|
# Adds 'flog' tool support to quality gem
|
|
4
4
|
module Flog
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.extend ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
5
9
|
private
|
|
6
10
|
|
|
7
11
|
def quality_flog
|
|
@@ -11,10 +15,6 @@ module Quality
|
|
|
11
15
|
end
|
|
12
16
|
end
|
|
13
17
|
|
|
14
|
-
def self.included(base)
|
|
15
|
-
base.extend ClassMethods
|
|
16
|
-
end
|
|
17
|
-
|
|
18
18
|
# See Flog.included
|
|
19
19
|
module ClassMethods
|
|
20
20
|
def count_violations_in_flog_output(line, threshold = 50)
|
|
@@ -7,7 +7,7 @@ module Quality
|
|
|
7
7
|
def punchlist_args
|
|
8
8
|
glob = "--glob '#{source_and_doc_files_glob}'"
|
|
9
9
|
regexp = " --regexp '#{punchlist_regexp}'" if punchlist_regexp
|
|
10
|
-
if exclude_files.
|
|
10
|
+
if !exclude_files.empty?
|
|
11
11
|
exclude = " --exclude-glob '#{source_files_exclude_glob}'"
|
|
12
12
|
end
|
|
13
13
|
|
|
@@ -2,6 +2,10 @@ module Quality
|
|
|
2
2
|
module Tools
|
|
3
3
|
# Adds 'rubocop' tool support to quality gem
|
|
4
4
|
module RailsBestPractices
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.extend ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
5
9
|
private
|
|
6
10
|
|
|
7
11
|
def quality_rails_best_practices
|
|
@@ -11,10 +15,6 @@ module Quality
|
|
|
11
15
|
end
|
|
12
16
|
end
|
|
13
17
|
|
|
14
|
-
def self.included(base)
|
|
15
|
-
base.extend ClassMethods
|
|
16
|
-
end
|
|
17
|
-
|
|
18
18
|
# See Rubocop.included
|
|
19
19
|
module ClassMethods
|
|
20
20
|
def count_rails_best_practices_violations(line)
|
data/lib/quality/tools/reek.rb
CHANGED
|
@@ -2,6 +2,10 @@ module Quality
|
|
|
2
2
|
module Tools
|
|
3
3
|
# Adds 'reek' tool support to quality gem
|
|
4
4
|
module Reek
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.extend ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
5
9
|
private
|
|
6
10
|
|
|
7
11
|
def quality_reek
|
|
@@ -14,10 +18,6 @@ module Quality
|
|
|
14
18
|
end
|
|
15
19
|
end
|
|
16
20
|
|
|
17
|
-
def self.included(base)
|
|
18
|
-
base.extend ClassMethods
|
|
19
|
-
end
|
|
20
|
-
|
|
21
21
|
# See Reek.included
|
|
22
22
|
module ClassMethods
|
|
23
23
|
def count_reek_violations(line)
|
|
@@ -2,6 +2,10 @@ module Quality
|
|
|
2
2
|
module Tools
|
|
3
3
|
# Adds 'rubocop' tool support to quality gem
|
|
4
4
|
module Rubocop
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.extend ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
5
9
|
private
|
|
6
10
|
|
|
7
11
|
def rubocop_args
|
|
@@ -16,10 +20,6 @@ module Quality
|
|
|
16
20
|
end
|
|
17
21
|
end
|
|
18
22
|
|
|
19
|
-
def self.included(base)
|
|
20
|
-
base.extend ClassMethods
|
|
21
|
-
end
|
|
22
|
-
|
|
23
23
|
# See Rubocop.included
|
|
24
24
|
module ClassMethods
|
|
25
25
|
def count_rubocop_violations(line)
|
data/lib/quality/version.rb
CHANGED
data/quality.gemspec
CHANGED
|
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
|
|
|
34
34
|
s.add_runtime_dependency('cane', ['>= 2.6'])
|
|
35
35
|
s.add_runtime_dependency('reek', ['>= 1.3.4'])
|
|
36
36
|
s.add_runtime_dependency('flog', ['>= 4.1.1'])
|
|
37
|
+
s.add_runtime_dependency('bundler-audit')
|
|
37
38
|
# flay 2.6.0 contained a command-line-parsing issue
|
|
38
39
|
s.add_runtime_dependency('flay', ['>= 2.4', '!= 2.6.0'])
|
|
39
40
|
s.add_runtime_dependency('rubocop')
|
|
@@ -42,6 +43,7 @@ Gem::Specification.new do |s|
|
|
|
42
43
|
s.add_runtime_dependency('punchlist', ['>= 1.1'])
|
|
43
44
|
s.add_runtime_dependency('brakeman')
|
|
44
45
|
s.add_runtime_dependency('rails_best_practices')
|
|
46
|
+
s.add_runtime_dependency('bigdecimal')
|
|
45
47
|
|
|
46
48
|
# need above 3.2.2 to support Ruby 2.0 syntax
|
|
47
49
|
#
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: quality
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 20.1.
|
|
4
|
+
version: 20.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Vince Broz
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-08-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -80,6 +80,20 @@ dependencies:
|
|
|
80
80
|
- - ">="
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: 4.1.1
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: bundler-audit
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
type: :runtime
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
83
97
|
- !ruby/object:Gem::Dependency
|
|
84
98
|
name: flay
|
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -184,6 +198,20 @@ dependencies:
|
|
|
184
198
|
- - ">="
|
|
185
199
|
- !ruby/object:Gem::Version
|
|
186
200
|
version: '0'
|
|
201
|
+
- !ruby/object:Gem::Dependency
|
|
202
|
+
name: bigdecimal
|
|
203
|
+
requirement: !ruby/object:Gem::Requirement
|
|
204
|
+
requirements:
|
|
205
|
+
- - ">="
|
|
206
|
+
- !ruby/object:Gem::Version
|
|
207
|
+
version: '0'
|
|
208
|
+
type: :runtime
|
|
209
|
+
prerelease: false
|
|
210
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
211
|
+
requirements:
|
|
212
|
+
- - ">="
|
|
213
|
+
- !ruby/object:Gem::Version
|
|
214
|
+
version: '0'
|
|
187
215
|
- !ruby/object:Gem::Dependency
|
|
188
216
|
name: ruby_parser
|
|
189
217
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -297,10 +325,11 @@ executables: []
|
|
|
297
325
|
extensions: []
|
|
298
326
|
extra_rdoc_files: []
|
|
299
327
|
files:
|
|
300
|
-
-
|
|
328
|
+
- License.txt
|
|
301
329
|
- README.md
|
|
302
330
|
- lib/quality/command_output_processor.rb
|
|
303
331
|
- lib/quality/config.rb
|
|
332
|
+
- lib/quality/directory_of_classes.rb
|
|
304
333
|
- lib/quality/process.rb
|
|
305
334
|
- lib/quality/quality_checker.rb
|
|
306
335
|
- lib/quality/rake/task.rb
|
|
@@ -308,6 +337,7 @@ files:
|
|
|
308
337
|
- lib/quality/runner.rb
|
|
309
338
|
- lib/quality/tools/bigfiles.rb
|
|
310
339
|
- lib/quality/tools/brakeman.rb
|
|
340
|
+
- lib/quality/tools/bundler_audit.rb
|
|
311
341
|
- lib/quality/tools/cane.rb
|
|
312
342
|
- lib/quality/tools/eslint.rb
|
|
313
343
|
- lib/quality/tools/flay.rb
|