quality 1.3.1 → 2.0.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/README.md +39 -6
- data/lib/quality/process_runner.rb +19 -0
- data/lib/quality/quality_checker.rb +9 -5
- data/lib/quality/rake/task.rb +8 -16
- data/lib/quality/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a6c78a9d29f78396f6a42f055cd86b36d675c1f
|
4
|
+
data.tar.gz: c5309355b11fa9fd5670e0608a009d50fd0e0965
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bfd3d4b9748a3bb76a8de2869e108f1f1a61bf28b69a012c8c6a3b9cb49992b4d291ccc94e8ba6b23e0b8934ed30c115f94dada91840149bcf1af05f85b0adb1
|
7
|
+
data.tar.gz: eadd84bae67d01c0feabd53ed45b957efd4751de7496c4ac44b881bfc8462a58d3e66f65468b9b57531955d20ffaff2ab83e9bc8020bee2cce205bf900d09376
|
data/README.md
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
[](https://travis-ci.org/apiology/quality)
|
2
|
+
[](https://coveralls.io/r/apiology/quality?branch=master)
|
3
|
+
|
2
4
|
|
3
5
|
# Quality -- code quality ratchet for Ruby
|
4
6
|
|
@@ -12,7 +14,20 @@ worse over time.
|
|
12
14
|
$ gem install quality
|
13
15
|
```
|
14
16
|
|
15
|
-
|
17
|
+
or in your Gemfile:
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
group :development do
|
21
|
+
gem 'quality'
|
22
|
+
end
|
23
|
+
```
|
24
|
+
and then:
|
25
|
+
|
26
|
+
```bash
|
27
|
+
$ bundle install
|
28
|
+
```
|
29
|
+
|
30
|
+
Once you have the gem, configure your Rakefile like this:
|
16
31
|
|
17
32
|
```ruby
|
18
33
|
require 'quality/rake/task'
|
@@ -52,22 +67,36 @@ Quality::Rake::Task.new { |t|
|
|
52
67
|
|
53
68
|
# Array of directory names which contain ruby files to analyze.
|
54
69
|
#
|
55
|
-
# Defaults to %w{lib test spec feature}, which translates to *.rb in the base directory, as well as
|
56
|
-
t.ruby_dirs = %w{lib test spec feature}
|
70
|
+
# Defaults to %w{app lib test spec feature}, which translates to *.rb in the base directory, as well as those directories.
|
71
|
+
t.ruby_dirs = %w{app lib test spec feature}
|
57
72
|
|
58
73
|
# Relative path to output directory where *_high_water_mark
|
59
74
|
# files will be read/written
|
60
75
|
#
|
61
|
-
# Defaults to
|
62
|
-
t.output_dir = '
|
76
|
+
# Defaults to 'metrics'
|
77
|
+
t.output_dir = 'metrics'
|
63
78
|
}
|
64
79
|
```
|
65
80
|
|
81
|
+
## Why
|
82
|
+
|
83
|
+
See [this post for more information](http://blog.apiology.cc/2014/06/scalable-quality-part-1.html) on the problem the quality gem solves.
|
84
|
+
|
85
|
+
## Maturity
|
86
|
+
|
87
|
+
Quality is rapidly evolving, but uses [semantic versioning](http://semver.org/)--any incompatible changes will come out as major number updates.
|
88
|
+
|
89
|
+
## Supported Ruby Versions
|
90
|
+
|
91
|
+
Tested against Ruby 1.9.3 and 2.1.2. Feel free to submit issues if problems are found elsewhere.
|
92
|
+
|
66
93
|
## Contributing
|
67
94
|
|
68
95
|
* Fork the repo
|
69
96
|
* Create a feature branch
|
70
|
-
* Submit a pull request
|
97
|
+
* Submit a github pull request
|
98
|
+
|
99
|
+
Many thanks to all contributors, especially [@andyw8](https://github.com/andyw8), who has contributed some great improvements.
|
71
100
|
|
72
101
|
### Dependencies
|
73
102
|
|
@@ -82,3 +111,7 @@ Quality makes use of the following other gems, which do the actual checking:
|
|
82
111
|
### Learn More
|
83
112
|
|
84
113
|
* Browse the code or install the latest development version from [https://github.com/apiology/quality/tree](https://github.com/apiology/quality/tree)
|
114
|
+
|
115
|
+
## License
|
116
|
+
|
117
|
+
Licensed under the MIT license.
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'English'
|
2
|
+
|
3
|
+
module Quality
|
4
|
+
# Wrapper around IO.popen that allows exit status to be mocked in tests.
|
5
|
+
class ProcessRunner
|
6
|
+
def initialize(full_cmd,
|
7
|
+
dependencies = {})
|
8
|
+
@full_cmd = full_cmd
|
9
|
+
@popener = dependencies[:popener] || IO
|
10
|
+
end
|
11
|
+
|
12
|
+
def run
|
13
|
+
@popener.popen(@full_cmd) do |file|
|
14
|
+
yield file
|
15
|
+
end
|
16
|
+
$CHILD_STATUS.exitstatus
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require_relative 'command_output_processor'
|
2
|
-
|
2
|
+
require_relative 'process_runner'
|
3
3
|
|
4
4
|
module Quality
|
5
5
|
# Runs a quality-checking, command, checks it agaist the existing
|
@@ -7,7 +7,6 @@ module Quality
|
|
7
7
|
# if possible, or outputs data if the number of violations increased.
|
8
8
|
class QualityChecker
|
9
9
|
def initialize(cmd, command_options, output_dir, dependencies = {})
|
10
|
-
@popener = dependencies[:popener] || IO
|
11
10
|
@count_file = dependencies[:count_file] || File
|
12
11
|
@count_io = dependencies[:count_io] || IO
|
13
12
|
@command_output_processor_class =
|
@@ -15,7 +14,11 @@ module Quality
|
|
15
14
|
Quality::CommandOutputProcessor
|
16
15
|
@cmd = cmd
|
17
16
|
@command_options = command_options
|
17
|
+
@count_dir = dependencies[:count_dir] || Dir
|
18
|
+
@count_dir.mkdir(output_dir) unless @count_file.exists?(output_dir)
|
18
19
|
@filename = File.join(output_dir, "#{cmd}_high_water_mark")
|
20
|
+
@process_runner_class =
|
21
|
+
dependencies[:process_runner_class] || ProcessRunner
|
19
22
|
end
|
20
23
|
|
21
24
|
def execute(&count_violations_on_line)
|
@@ -35,11 +38,12 @@ module Quality
|
|
35
38
|
end
|
36
39
|
|
37
40
|
def run_command(processor, &count_violations_on_line)
|
38
|
-
@
|
41
|
+
runner = @process_runner_class.new(full_cmd)
|
42
|
+
|
43
|
+
runner.run do |file|
|
39
44
|
processor.file = file
|
40
45
|
@command_output = processor.process(&count_violations_on_line)
|
41
46
|
end
|
42
|
-
$CHILD_STATUS.exitstatus
|
43
47
|
end
|
44
48
|
|
45
49
|
def check_exit_status(exit_status)
|
@@ -102,7 +106,7 @@ module Quality
|
|
102
106
|
|
103
107
|
def write_violations(new_violations)
|
104
108
|
@count_file.open(@filename, 'w') do |file|
|
105
|
-
file.write(new_violations.to_s)
|
109
|
+
file.write(new_violations.to_s + "\n")
|
106
110
|
end
|
107
111
|
end
|
108
112
|
end
|
data/lib/quality/rake/task.rb
CHANGED
@@ -50,8 +50,8 @@ module Quality
|
|
50
50
|
|
51
51
|
# Array of directory names which contain ruby files to analyze.
|
52
52
|
#
|
53
|
-
# Defaults to %w(lib test spec feature), which translates to *.rb in
|
54
|
-
# the base directory, as well as
|
53
|
+
# Defaults to %w(app lib test spec feature), which translates to *.rb in
|
54
|
+
# the base directory, as well as those directories.
|
55
55
|
attr_writer :ruby_dirs
|
56
56
|
|
57
57
|
# Relative path to output directory where *_high_water_mark
|
@@ -66,7 +66,7 @@ module Quality
|
|
66
66
|
|
67
67
|
@skip_tools = []
|
68
68
|
|
69
|
-
@output_dir = '
|
69
|
+
@output_dir = 'metrics'
|
70
70
|
|
71
71
|
yield self if block_given?
|
72
72
|
|
@@ -143,12 +143,10 @@ module Quality
|
|
143
143
|
installed = @gem_spec.find_all_by_name(tool).any?
|
144
144
|
suppressed = @skip_tools.include? tool
|
145
145
|
|
146
|
-
if !
|
147
|
-
puts "#{tool} not installed"
|
148
|
-
elsif suppressed
|
149
|
-
puts "Suppressing use of #{tool}"
|
150
|
-
else
|
146
|
+
if installed && !suppressed
|
151
147
|
method("quality_#{tool}".to_sym).call
|
148
|
+
elsif !installed
|
149
|
+
puts "#{tool} not installed"
|
152
150
|
end
|
153
151
|
end
|
154
152
|
|
@@ -163,12 +161,11 @@ module Quality
|
|
163
161
|
existing_violations = count_existing_violations(filename)
|
164
162
|
new_violations = [0, existing_violations - 1].max
|
165
163
|
write_violations(filename, new_violations)
|
166
|
-
tighten_standard(filename) if new_violations != existing_violations
|
167
164
|
end
|
168
165
|
|
169
166
|
def write_violations(filename, new_violations)
|
170
167
|
@count_file.open(filename, 'w') do |file|
|
171
|
-
file.write(new_violations.to_s)
|
168
|
+
file.write(new_violations.to_s + "\n")
|
172
169
|
end
|
173
170
|
end
|
174
171
|
|
@@ -178,11 +175,6 @@ module Quality
|
|
178
175
|
existing_violations
|
179
176
|
end
|
180
177
|
|
181
|
-
def tighten_standard(filename)
|
182
|
-
@cmd_runner
|
183
|
-
.system("git commit -m 'tighten quality standard' #{filename}")
|
184
|
-
end
|
185
|
-
|
186
178
|
def ratchet_quality_cmd(cmd,
|
187
179
|
command_options,
|
188
180
|
&count_violations_on_line)
|
@@ -193,7 +185,7 @@ module Quality
|
|
193
185
|
end
|
194
186
|
|
195
187
|
def ruby_dirs
|
196
|
-
@ruby_dirs ||= %w(lib test spec feature)
|
188
|
+
@ruby_dirs ||= %w(app lib test spec feature)
|
197
189
|
end
|
198
190
|
|
199
191
|
def ruby_files_glob
|
data/lib/quality/version.rb
CHANGED
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:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vince Broz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cane
|
@@ -179,6 +179,7 @@ files:
|
|
179
179
|
- README.md
|
180
180
|
- Rakefile
|
181
181
|
- lib/quality/command_output_processor.rb
|
182
|
+
- lib/quality/process_runner.rb
|
182
183
|
- lib/quality/quality_checker.rb
|
183
184
|
- lib/quality/rake/task.rb
|
184
185
|
- lib/quality/tools/cane.rb
|
@@ -208,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
209
|
version: '0'
|
209
210
|
requirements: []
|
210
211
|
rubyforge_project:
|
211
|
-
rubygems_version: 2.
|
212
|
+
rubygems_version: 2.4.3
|
212
213
|
signing_key:
|
213
214
|
specification_version: 4
|
214
215
|
summary: Code quality tools for Ruby
|