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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 48fd511b69278d258fd696ea0c4b4982bc434b34
4
- data.tar.gz: ca2ac68857a3ae36ac3a4cb6dcaec43dac938558
3
+ metadata.gz: 00e2023f6cecd2f6706b0a7260112d8fe713a510
4
+ data.tar.gz: 5f0d6b1824039886ddc6f08a619a33cd0926df00
5
5
  SHA512:
6
- metadata.gz: e7e5ffa954d1e5f559544a1162b2456b44ee462b7eecee3bafa7a3a5d2b349565ee7e14a6a1e8d46a591f2b031f754041a5f40898140fbb6d8ca5a8acff32bac
7
- data.tar.gz: e5f214a7e572147a99fd44b7343c5c16da3227b091bfe556ff55fe41f568d3a921eb5f75ded8936b3f774ea9dec8e01d10af8c7b5be27801b8e19104e593240f
6
+ metadata.gz: 8e39a1ea2afb06be8f312dd584c926eac633cfb25e55f00610efd25fafff3bf9a41ce7394c7b7d89c8ea092e0b4f0fcaf98fbb2d69753d6ca604abf4ae7dabe4
7
+ data.tar.gz: b0af83671b719e431579f93f8630ada3ec021dcc65f7e099c94aac8e56d96fce3e96ea3079609b119cc1e7e7c2c58eb5b2e61ad9f9416195070f14aa5c348fff
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
@@ -77,7 +77,7 @@ module Quality
77
77
 
78
78
  def initialize(quality_name: 'quality',
79
79
  ratchet_name: 'ratchet',
80
- globber: fail)
80
+ globber: raise)
81
81
  @quality_name = quality_name
82
82
  @ratchet_name = ratchet_name
83
83
  @skip_tools = []
@@ -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
- fail("Error detected running #{full_cmd}. " \
59
- "Exit status is #{exit_status}") if exit_status != 0
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
- fail("Output from #{@cmd}\n\n#{@command_output}\n\n" \
75
- "Reduce total number of #{@cmd} violations " \
76
- "to #{existing} or below!")
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
@@ -7,10 +7,10 @@ module Quality
7
7
  end
8
8
 
9
9
  def invocation
10
- if @args.size > 0
10
+ if !@args.empty?
11
11
  "#{cmd_with_ruby_hack_prefix} #{@args}"
12
12
  else
13
- "#{cmd_with_ruby_hack_prefix}"
13
+ cmd_with_ruby_hack_prefix.to_s
14
14
  end
15
15
  end
16
16
 
@@ -1,35 +1,19 @@
1
1
  require 'active_support/inflector'
2
2
  require 'forwardable'
3
3
  require_relative 'which'
4
- require_relative 'tools/cane'
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 Tools::Cane
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
- fail("Problem with file #{filename}") if existing_violations < 0
71
+ raise("Problem with file #{filename}") if existing_violations < 0
88
72
  existing_violations
89
73
  end
90
74
 
@@ -6,7 +6,7 @@ module Quality
6
6
 
7
7
  def bigfiles_args
8
8
  args = ['--glob', "'#{source_files_glob}'"]
9
- if exclude_files.size > 0
9
+ if !exclude_files.empty?
10
10
  args << ['--exclude-glob', "'#{source_files_exclude_glob}'"]
11
11
  end
12
12
  args.join(' ')
@@ -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
@@ -16,7 +16,7 @@ module Quality
16
16
  args = [
17
17
  "-f '#{ruby_files_glob}'",
18
18
  ]
19
- args += cane_exclude_args if exclude_files.size > 0
19
+ args += cane_exclude_args if !exclude_files.empty?
20
20
  args.join(' ')
21
21
  end
22
22
 
@@ -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.size > 0
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)
@@ -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)
@@ -2,5 +2,5 @@
2
2
  # reek, flog, flay and rubocop and makes sure your numbers don't get
3
3
  # any worse over time.
4
4
  module Quality
5
- VERSION = '20.1.0'.freeze
5
+ VERSION = '20.1.1'.freeze
6
6
  end
@@ -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.0
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-05-19 00:00:00.000000000 Z
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
- - LICENSE.txt
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