rubycritic 4.5.2 → 4.7.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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -1
  3. data/README.md +27 -7
  4. data/lib/rubycritic/analysers/coverage.rb +26 -24
  5. data/lib/rubycritic/cli/options/argv.rb +8 -1
  6. data/lib/rubycritic/commands/compare.rb +3 -2
  7. data/lib/rubycritic/configuration.rb +14 -5
  8. data/lib/rubycritic/generators/html/assets/{fonts → vendor/fonts}/FontAwesome.otf +0 -0
  9. data/lib/rubycritic/generators/html/assets/{fonts → vendor/fonts}/fontawesome-webfont.eot +0 -0
  10. data/lib/rubycritic/generators/html/assets/{fonts → vendor/fonts}/fontawesome-webfont.svg +0 -0
  11. data/lib/rubycritic/generators/html/assets/{fonts → vendor/fonts}/fontawesome-webfont.ttf +0 -0
  12. data/lib/rubycritic/generators/html/assets/{fonts → vendor/fonts}/fontawesome-webfont.woff +0 -0
  13. data/lib/rubycritic/generators/html/assets/{fonts → vendor/fonts}/fontawesome-webfont.woff2 +0 -0
  14. data/lib/rubycritic/generators/html/assets/{fonts → vendor/fonts}/glyphicons-halflings-regular.eot +0 -0
  15. data/lib/rubycritic/generators/html/assets/{fonts → vendor/fonts}/glyphicons-halflings-regular.svg +0 -0
  16. data/lib/rubycritic/generators/html/assets/{fonts → vendor/fonts}/glyphicons-halflings-regular.ttf +0 -0
  17. data/lib/rubycritic/generators/html/assets/{fonts → vendor/fonts}/glyphicons-halflings-regular.woff +0 -0
  18. data/lib/rubycritic/generators/html/assets/{fonts → vendor/fonts}/glyphicons-halflings-regular.woff2 +0 -0
  19. data/lib/rubycritic/generators/html/assets/{javascripts → vendor/javascripts}/bootstrap.min.js +0 -0
  20. data/lib/rubycritic/generators/html/assets/{javascripts → vendor/javascripts}/highcharts.src-4.0.1.js +0 -0
  21. data/lib/rubycritic/generators/html/assets/{javascripts → vendor/javascripts}/jquery.filtertable.min.js +0 -0
  22. data/lib/rubycritic/generators/html/assets/{javascripts → vendor/javascripts}/jquery.min.js +0 -0
  23. data/lib/rubycritic/generators/html/assets/{javascripts → vendor/javascripts}/jquery.scrollTo.min.js +0 -0
  24. data/lib/rubycritic/generators/html/assets/{javascripts → vendor/javascripts}/jquery.tablesorter.js +0 -0
  25. data/lib/rubycritic/generators/html/assets/{javascripts → vendor/javascripts}/jquery.tablesorter.min.js +0 -0
  26. data/lib/rubycritic/generators/html/assets/{javascripts → vendor/javascripts}/jquery.timeago.js +0 -0
  27. data/lib/rubycritic/generators/html/assets/{javascripts → vendor/javascripts}/prettify.js +0 -0
  28. data/lib/rubycritic/generators/html/assets/{stylesheets → vendor/stylesheets}/bootstrap.min.css +0 -0
  29. data/lib/rubycritic/generators/html/assets/{stylesheets → vendor/stylesheets}/font-awesome.min.css +0 -0
  30. data/lib/rubycritic/generators/html/assets/{stylesheets → vendor/stylesheets}/prettify.css +0 -0
  31. data/lib/rubycritic/generators/html/assets/{stylesheets → vendor/stylesheets}/prettify.custom_theme.css +0 -0
  32. data/lib/rubycritic/generators/html/templates/code_index.html.erb +3 -1
  33. data/lib/rubycritic/generators/html/templates/layouts/application.html.erb +14 -14
  34. data/lib/rubycritic/generators/html/view_helpers.rb +0 -12
  35. data/lib/rubycritic/rake_task.rb +22 -12
  36. data/lib/rubycritic/source_control_systems/base.rb +1 -1
  37. data/lib/rubycritic/source_control_systems/git/churn.rb +8 -2
  38. data/lib/rubycritic/source_control_systems/git.rb +1 -1
  39. data/lib/rubycritic/version.rb +1 -1
  40. metadata +50 -42
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 652fcfc312c74fc2e3192e2ce98fb03055308ce5760d6697dd58d04eb59df508
4
- data.tar.gz: b8c845a71d1277a0e569f2a43b477fb8b399f1800c0ff420893c2bf89f447dbd
3
+ metadata.gz: 9223069d4934bf55e41bd199b4610e9b230b4115d36196354d4aa93d87b8ea01
4
+ data.tar.gz: 7d1b324b4df74ac99bb1103c6f80678a90e872418eac4faa87dd2f687cdb87cc
5
5
  SHA512:
6
- metadata.gz: fb084002ab283454294ae6a7d5e87824c5fff66b77d107f9f04fd22a10153cbc2b3ef56635371fc55037d4e8af9276f6563c39de6d3ab2c33d600d0def59b30c
7
- data.tar.gz: 456aa8aaaa6115c8fcb72430ee7db5ae5f2f94cf5bd6fa5f5ee344f95cc46bd5544e6235138a43162810916a52f501695e3e51d9d6c510bb7ddd303a696d4831
6
+ metadata.gz: 91abe36adad615bf645187214511346e8175f28f913462baaa31b0be4bdf1986fa01e3841ff71866fa80f5de9d2e10d0ed6cd53dded35c30b04d2ad1910a5d6f
7
+ data.tar.gz: 6764cabd0cac4338072f4eadde37819095a10c3c5d5fd78d76d75ffe0e68d12ee58afe0169c286f3ea32fad9e91df145a9396e42154cbd446e78f8ee64b579ad
data/CHANGELOG.md CHANGED
@@ -1,4 +1,27 @@
1
- # master [(unreleased)](https://github.com/whitesmith/rubycritic/compare/v4.5.1...master)
1
+ # main [(unreleased)](https://github.com/whitesmith/rubycritic/compare/v4.7.0...main)
2
+
3
+ # v4.7.0 / 2022-05-06 [(commits)](https://github.com/whitesmith/rubycritic/compare/v4.6.1...v4.7.0)
4
+
5
+ * [CHANGE] Run test suite with Ruby 3.1 (by [@etagwerker][])
6
+ * [FEATURE] Allow the Rake task generator to accept a description (by [@anicholson][])
7
+ * [CHANGE] Replace travis-ci with Github Actions for contributors (by [@RyanSnodgrass][])
8
+ * [CHANGE] Drop support for JRuby 9.1.x (by [@RyanSnodgrass][])
9
+ * [BUGFIX] Exit with 0 or 1 from Rake Task. Fixes #214 (by [@RyanSnodgrass][])
10
+
11
+ # v4.6.1 / 2021-01-28 [(commits)](https://github.com/whitesmith/rubycritic/compare/v4.6.0...v4.6.1)
12
+
13
+ * [CHANGE] CI: Drop rbx-3 from matrix, does not install (by [@olleolleolle][])
14
+ * [CHANGE] Add support for Ruby 3.0 (by [@etagwerker][])
15
+ * [BUGFIX] Fix images on readme (by [@borisrorsvort][])
16
+
17
+ # v4.6.0 / 2021-01-28 [(commits)](https://github.com/whitesmith/rubycritic/compare/v4.5.2...v4.6.0)
18
+
19
+ * [CHANGE] Fix rubocop offenses (by [@sl4vr][])
20
+ * [CHANGE] Make Github Linguist ignore vendored files (by [@sl4vr][])
21
+ * [BUGFIX] Fix directory structure of reports when comparing branches (by [@denny][])
22
+ * [BUGFIX] Restrict simplecov to versions before data format changed (by [@denny][])
23
+
24
+ * [BUGFIX] Handle missing comparison file in html template (by @lauratpa)
2
25
 
3
26
  # v4.5.2 / 2020-08-20 [(commits)](https://github.com/whitesmith/rubycritic/compare/v4.5.1...v4.5.2)
4
27
 
@@ -8,6 +31,8 @@
8
31
 
9
32
  * [BUGFIX] Handle git --name-status Copied (C) operation (by [@rizalmuthi][])
10
33
 
34
+ * [FEATURE] Add --churn-after (only supports git) to limit churn analysis to recent history (by [@jackcasey][])
35
+
11
36
  # v4.5.0 / 2020-05-14 [(commits)](https://github.com/whitesmith/rubycritic/compare/v4.4.1...v4.5.0)
12
37
 
13
38
  * [CHANGE] Relax `launchy` version dependency requirement
@@ -348,3 +373,7 @@
348
373
  [@GeoffTidey]: https://github.com/GeoffTidey
349
374
  [@lloydwatkin]: https://github.com/lloydwatkin
350
375
  [@Flink]: https://github.com/Flink
376
+ [@jackcasey]: https://github.com/jackcasey
377
+ [@sl4vr]: https://github.com/sl4vr
378
+ [@denny]: https://github.com/denny
379
+ [@RyanSnodgrass]: https://github.com/RyanSnodgrass
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Build Status](https://travis-ci.org/whitesmith/rubycritic.svg?branch=master)](https://travis-ci.org/whitesmith/rubycritic)
5
5
  [![Code Climate](https://codeclimate.com/github/whitesmith/rubycritic/badges/gpa.svg)](https://codeclimate.com/github/whitesmith/rubycritic)
6
6
 
7
- <img src="https://github.com/whitesmith/rubycritic/raw/master/images/logo.png" alt="RubyCritic Icon" align="right">
7
+ <img src="https://github.com/whitesmith/rubycritic/raw/main/images/logo.png" alt="RubyCritic Icon" align="right">
8
8
 
9
9
  RubyCritic is a gem that wraps around static analysis gems such as [Reek][1], [Flay][2] and [Flog][3] to provide a quality report of your Ruby code.
10
10
 
@@ -27,15 +27,15 @@ This gem provides features such as:
27
27
 
28
28
  1. An overview of your project:
29
29
 
30
- ![RubyCritic overview screenshot](https://github.com/whitesmith/rubycritic/raw/master/images/overview.png)
30
+ ![RubyCritic overview screenshot](https://github.com/whitesmith/rubycritic/raw/main/images/overview.png)
31
31
 
32
32
  2. An index of the project files with their respective number of smells:
33
33
 
34
- ![RubyCritic code index screenshot](https://github.com/whitesmith/rubycritic/raw/master/images/code.png)
34
+ ![RubyCritic code index screenshot](https://github.com/whitesmith/rubycritic/raw/main/images/code.png)
35
35
 
36
36
  3. An index of the smells detected:
37
37
 
38
- ![RubyCritic smells index screenshot](https://github.com/whitesmith/rubycritic/raw/master/images/smells.png)
38
+ ![RubyCritic smells index screenshot](https://github.com/whitesmith/rubycritic/raw/main/images/smells.png)
39
39
 
40
40
  4. When analysing code like the following:
41
41
 
@@ -51,11 +51,11 @@ This gem provides features such as:
51
51
 
52
52
  It basically turns something like this:
53
53
 
54
- ![Reek output screenshot](https://github.com/whitesmith/rubycritic/raw/master/images/reek.png)
54
+ ![Reek output screenshot](https://github.com/whitesmith/rubycritic/raw/main/images/reek.png)
55
55
 
56
56
  Into something like this:
57
57
 
58
- ![RubyCritic file code screenshot](https://github.com/whitesmith/rubycritic/raw/master/images/smell-details.png)
58
+ ![RubyCritic file code screenshot](https://github.com/whitesmith/rubycritic/raw/main/images/smell-details.png)
59
59
 
60
60
  5. It uses your source control system (only Git, Mercurial and Perforce
61
61
  are currently supported) to compare your currently uncommitted
@@ -196,6 +196,9 @@ RubyCritic::RakeTask.new do |task|
196
196
 
197
197
  # Defaults to false
198
198
  task.verbose = true
199
+
200
+ # Fail the Rake task if RubyCritic doesn't pass. Defaults to true
201
+ task.fail_on_error = true
199
202
  end
200
203
  ```
201
204
 
@@ -208,6 +211,22 @@ RubyCritic::RakeTask.new do |task|
208
211
  end
209
212
  ```
210
213
 
214
+ If you wish to create multiple Rake tasks (e.g., for local & for ci-specific configuration), you can do so!
215
+ If you decide to do this, you should provide a clearer description for each task:
216
+
217
+ ```ruby
218
+ # for local
219
+ RubyCritic::RakeTask.new("local", "Run RubyCritic (local configuration)" do |task|
220
+ # ...
221
+ end
222
+
223
+ # for CI
224
+ RubyCritic::RakeTask.new("ci", "Run RubyCritic (CI configuration)" do |task|
225
+ task.options = "--mode-ci"
226
+ # ...
227
+ end
228
+ ```
229
+
211
230
  ## Formatters
212
231
 
213
232
  See [formatters](docs/formatters.md)
@@ -220,6 +239,7 @@ RubyCritic is supporting Ruby versions:
220
239
  * 2.5
221
240
  * 2.6
222
241
  * 2.7
242
+ * 3.0
223
243
 
224
244
  ## Improving RubyCritic
225
245
 
@@ -243,7 +263,7 @@ The current core team consists of:
243
263
 
244
264
  ## Credits
245
265
 
246
- ![Whitesmith](https://github.com/whitesmith/rubycritic/raw/master/images/whitesmith.png)
266
+ ![Whitesmith](https://github.com/whitesmith/rubycritic/raw/main/images/whitesmith.png)
247
267
 
248
268
  RubyCritic is maintained and funded by [Whitesmith][9]. Tweet your questions or suggestions to [@Whitesmithco][10].
249
269
 
@@ -9,6 +9,8 @@ module RubyCritic
9
9
  class Coverage
10
10
  include Colorize
11
11
 
12
+ RESULTSET_FILENAME = '.resultset.json'
13
+
12
14
  def initialize(analysed_modules)
13
15
  @analysed_modules = analysed_modules
14
16
  @result = results.first
@@ -44,30 +46,28 @@ module RubyCritic
44
46
  @result.source_files.detect { |file| file.filename == needle }
45
47
  end
46
48
 
47
- # The path to the .resultset.json cache file
49
+ # The path to the cache file
48
50
  def resultset_path
49
- File.join(SimpleCov.coverage_path, '.resultset.json')
51
+ File.join(SimpleCov.coverage_path, RESULTSET_FILENAME)
50
52
  end
51
53
 
52
54
  def resultset_writelock
53
- File.join(SimpleCov.coverage_path, '.resultset.json.lock')
55
+ "#{resultset_path}.lock"
54
56
  end
55
57
 
56
58
  # Loads the cached resultset from JSON and returns it as a Hash,
57
59
  # caching it for subsequent accesses.
58
60
  def resultset
59
- @resultset ||= begin
60
- if (data = stored_data)
61
- begin
62
- JSON.parse(data) || {}
63
- rescue JSON::ParserError => err
64
- puts "Error: Loading .resultset.json: #{err.message}"
65
- {}
66
- end
67
- else
68
- {}
69
- end
70
- end
61
+ @resultset ||= parse_resultset(stored_data)
62
+ end
63
+
64
+ def parse_resultset(data)
65
+ return {} unless data
66
+
67
+ JSON.parse(data) || {}
68
+ rescue JSON::ParserError => err
69
+ puts "Error: Loading #{RESULTSET_FILENAME}: #{err.message}"
70
+ {}
71
71
  end
72
72
 
73
73
  # Returns the contents of the resultset cache as a string or if the file is missing or empty nil
@@ -85,21 +85,23 @@ module RubyCritic
85
85
 
86
86
  # Ensure only one process is reading or writing the resultset at any
87
87
  # given time
88
- def synchronize_resultset
88
+ def synchronize_resultset(&proc)
89
89
  # make it reentrant
90
90
  return yield if defined?(@resultset_locked) && @resultset_locked == true
91
91
 
92
92
  return yield unless File.exist?(resultset_writelock)
93
93
 
94
- begin
95
- @resultset_locked = true
96
- File.open(resultset_writelock, 'w+') do |file|
97
- file.flock(File::LOCK_EX)
98
- yield
99
- end
100
- ensure
101
- @resultset_locked = false
94
+ with_lock(&proc)
95
+ end
96
+
97
+ def with_lock
98
+ @resultset_locked = true
99
+ File.open(resultset_writelock, 'w+') do |file|
100
+ file.flock(File::LOCK_EX)
101
+ yield
102
102
  end
103
+ ensure
104
+ @resultset_locked = false
103
105
  end
104
106
 
105
107
  # Gets the resultset hash and re-creates all included instances
@@ -70,6 +70,12 @@ module RubyCritic
70
70
  self.minimum_score = Float(min_score)
71
71
  end
72
72
 
73
+ opts.on('--churn-after [DATE]', 'Only count churn from a certain date.',
74
+ 'The date is passed through to version control (currently git only).',
75
+ 'Example: 2017-01-01') do |churn_after|
76
+ self.churn_after = churn_after
77
+ end
78
+
73
79
  opts.on('-m', '--mode-ci [BASE_BRANCH]',
74
80
  'Use CI mode (faster, analyses diffs w.r.t base_branch (default: master))') do |branch|
75
81
  self.base_branch = branch || 'master'
@@ -110,6 +116,7 @@ module RubyCritic
110
116
  suppress_ratings: suppress_ratings,
111
117
  help_text: parser.help,
112
118
  minimum_score: minimum_score,
119
+ churn_after: churn_after,
113
120
  no_browser: no_browser,
114
121
  base_branch: base_branch,
115
122
  feature_branch: feature_branch,
@@ -121,7 +128,7 @@ module RubyCritic
121
128
  private
122
129
 
123
130
  attr_accessor :mode, :root, :formats, :formatters, :deduplicate_symlinks,
124
- :suppress_ratings, :minimum_score, :no_browser,
131
+ :suppress_ratings, :minimum_score, :churn_after, :no_browser,
125
132
  :parser, :base_branch, :feature_branch, :threshold_score
126
133
  def paths
127
134
  @argv unless @argv.empty?
@@ -13,6 +13,7 @@ module RubyCritic
13
13
  class Compare < Default
14
14
  def initialize(options)
15
15
  super
16
+ @original_config_root = Config.root
16
17
  @build_number = 0
17
18
  end
18
19
 
@@ -57,7 +58,7 @@ module RubyCritic
57
58
  def analyse_modified_files
58
59
  modified_files = Config.feature_branch_collection.where(SourceControlSystem::Git.modified_files)
59
60
  analysed_modules = AnalysedModulesCollection.new(modified_files.map(&:path), modified_files)
60
- Config.root = "#{Config.root}/compare"
61
+ Config.root = Config.compare_root_directory
61
62
  report(analysed_modules)
62
63
  end
63
64
 
@@ -85,7 +86,7 @@ module RubyCritic
85
86
  end
86
87
 
87
88
  def branch_directory(branch)
88
- "#{Config.root}/compare/#{Config.send(branch)}"
89
+ "#{@original_config_root}/compare/#{Config.send(branch)}"
89
90
  end
90
91
 
91
92
  # create a txt file with the branch score details
@@ -10,7 +10,7 @@ module RubyCritic
10
10
  :feature_branch, :base_branch_score, :feature_branch_score,
11
11
  :base_root_directory, :feature_root_directory,
12
12
  :compare_root_directory, :threshold_score, :base_branch_collection,
13
- :feature_branch_collection
13
+ :feature_branch_collection, :churn_after
14
14
 
15
15
  def set(options)
16
16
  self.mode = options[:mode] || :default
@@ -19,12 +19,17 @@ module RubyCritic
19
19
  self.suppress_ratings = options[:suppress_ratings]
20
20
  self.open_with = options[:open_with]
21
21
  self.no_browser = options[:no_browser]
22
- self.base_branch = options[:base_branch]
23
- self.feature_branch = options[:feature_branch]
24
22
  self.threshold_score = options[:threshold_score].to_i
23
+ setup_version_control(options)
25
24
  setup_formats(options)
26
25
  end
27
26
 
27
+ def setup_version_control(options)
28
+ self.base_branch = options[:base_branch]
29
+ self.feature_branch = options[:feature_branch]
30
+ self.churn_after = options[:churn_after]
31
+ end
32
+
28
33
  def setup_formats(options)
29
34
  formats = options[:formats].to_a
30
35
  self.formats = formats.empty? ? [:html] : formats
@@ -59,11 +64,15 @@ module RubyCritic
59
64
  end
60
65
 
61
66
  def self.method_missing(method, *args, &block)
62
- configuration.public_send(method, *args, &block)
67
+ if configuration.respond_to?(method)
68
+ configuration.public_send(method, *args, &block)
69
+ else
70
+ super
71
+ end
63
72
  end
64
73
 
65
74
  def self.respond_to_missing?(symbol, include_all = false)
66
- configuration.respond_to_missing?(symbol) || super
75
+ configuration.respond_to?(symbol) || super
67
76
  end
68
77
  end
69
78
  end
@@ -25,7 +25,9 @@
25
25
  <td class="center">
26
26
  <% if Config.build_mode? %>
27
27
  <% master_analysed_module = Config.base_branch_collection.find(analysed_module.pathname) %>
28
- <% if master_analysed_module.cost > analysed_module.cost %>
28
+ <% if !master_analysed_module %>
29
+ <span class="empty-span glyphicon"></span>
30
+ <% elsif master_analysed_module.cost > analysed_module.cost %>
29
31
  <span class="glyphicon glyphicon-arrow-up green-color"></span>
30
32
  <% elsif master_analysed_module.cost < analysed_module.cost %>
31
33
  <span class="glyphicon glyphicon-arrow-down red-color"></span>
@@ -8,16 +8,16 @@
8
8
  <meta name="viewport" content="width=device-width, initial-scale=1">
9
9
 
10
10
  <!-- StyleSheets -->
11
- <link href="<%= stylesheet_path(:'bootstrap.min') %>" media="screen, projection, print" rel="stylesheet" type="text/css">
12
- <link href="<%= stylesheet_path(:'font-awesome.min') %>" media="screen, projection, print" rel="stylesheet" type="text/css">
13
- <link href="<%= stylesheet_path(:'prettify.custom_theme') %>" media="screen, projection, print" rel="stylesheet" type="text/css">
14
- <link href="<%= stylesheet_path(:application) %>" media="screen, projection, print" rel="stylesheet" type="text/css">
11
+ <link href="<%= asset_path("vendor/stylesheets/bootstrap.min.css") %>" media="screen, projection, print" rel="stylesheet" type="text/css">
12
+ <link href="<%= asset_path("vendor/stylesheets/font-awesome.min.css") %>" media="screen, projection, print" rel="stylesheet" type="text/css">
13
+ <link href="<%= asset_path("vendor/stylesheets/prettify.custom_theme.css") %>" media="screen, projection, print" rel="stylesheet" type="text/css">
14
+ <link href="<%= asset_path("stylesheets/application.css") %>" media="screen, projection, print" rel="stylesheet" type="text/css">
15
15
  </head>
16
16
 
17
17
  <body>
18
18
  <header class="navbar navbar-default navbar-fixed-top">
19
19
  <a href="#menu-toggle" class="btn btn-default hidden-lg visible-sm-* hidden-md visible-xs-* pull-left" id="menu-toggle"><i class="fa fa-bars" aria-hidden="true"></i></a>
20
- <a href="<%= file_path('overview.html') %>"><img src="<%= image_path('logo.png') %>" alt="Ruby Critic Logo" title="Ruby Critic Logo" width="55"><span class="logo">RUBYCRITIC</span></a>
20
+ <a href="<%= file_path('overview.html') %>"><img src="<%= asset_path('images/logo.png') %>" alt="Ruby Critic Logo" title="Ruby Critic Logo" width="55"><span class="logo">RUBYCRITIC</span></a>
21
21
  <% if Config.compare_branches_mode? %>
22
22
  <ul class="nav navbar-nav navbar-right">
23
23
  <a href="<%= @base_path %>"><span class="branch"><%= Config.base_branch %></span></a>
@@ -53,14 +53,14 @@
53
53
  </div>
54
54
 
55
55
  <!-- JavaScripts -->
56
- <%= javascript_tag(:'jquery.min') %>
57
- <%= javascript_tag(:'jquery.tablesorter.min') %>
58
- <%= javascript_tag(:'jquery.scrollTo.min') %>
59
- <%= javascript_tag(:'jquery.timeago') %>
60
- <%= javascript_tag(:'highcharts.src-4.0.1') %>
61
- <%= javascript_tag(:'prettify') %>
62
- <%= javascript_tag(:'bootstrap.min') %>
63
- <%= javascript_tag(:application) %>
64
- <%= javascript_tag(:'jquery.filtertable.min') %>
56
+ <script src="<%= asset_path("vendor/javascripts/jquery.min.js") %>"></script>
57
+ <script src="<%= asset_path("vendor/javascripts/jquery.tablesorter.min.js") %>"></script>
58
+ <script src="<%= asset_path("vendor/javascripts/jquery.scrollTo.min.js") %>"></script>
59
+ <script src="<%= asset_path("vendor/javascripts/jquery.timeago.js") %>"></script>
60
+ <script src="<%= asset_path("vendor/javascripts/highcharts.src-4.0.1.js") %>"></script>
61
+ <script src="<%= asset_path("vendor/javascripts/prettify.js") %>"></script>
62
+ <script src="<%= asset_path("vendor/javascripts/bootstrap.min.js") %>"></script>
63
+ <script src="<%= asset_path("javascripts/application.js") %>"></script>
64
+ <script src="<%= asset_path("vendor/javascripts/jquery.filtertable.min.js") %>"></script>
65
65
  </body>
66
66
  </html>
@@ -6,22 +6,10 @@ module RubyCritic
6
6
  "<time class='js-timeago' datetime='#{time}'>#{time}</time>"
7
7
  end
8
8
 
9
- def javascript_tag(file)
10
- "<script src='" + asset_path("javascripts/#{file}.js").to_s + "'></script>"
11
- end
12
-
13
- def stylesheet_path(file)
14
- asset_path("stylesheets/#{file}.css")
15
- end
16
-
17
9
  def asset_path(file)
18
10
  relative_path("assets/#{file}")
19
11
  end
20
12
 
21
- def image_path(file)
22
- asset_path("images/#{file}")
23
- end
24
-
25
13
  def file_path(file)
26
14
  relative_path(file)
27
15
  end
@@ -36,11 +36,17 @@ module RubyCritic
36
36
  # "-p / --path" since that is set separately. Defaults to ''.
37
37
  attr_writer :options
38
38
 
39
- def initialize(name = :rubycritic)
40
- @name = name
41
- @paths = FileList['.']
42
- @options = ''
43
- @verbose = false
39
+ # Whether or not to fail Rake task when RubyCritic does not pass.
40
+ # Defaults to true.
41
+ attr_writer :fail_on_error
42
+
43
+ def initialize(name = :rubycritic, description = 'Run RubyCritic')
44
+ @name = name
45
+ @description = description
46
+ @paths = FileList['.']
47
+ @options = ''
48
+ @verbose = false
49
+ @fail_on_error = true
44
50
 
45
51
  yield self if block_given?
46
52
  define_task
@@ -48,20 +54,24 @@ module RubyCritic
48
54
 
49
55
  private
50
56
 
51
- attr_reader :name, :paths, :verbose, :options
57
+ attr_reader :name, :description, :paths, :verbose, :options, :fail_on_error
52
58
 
53
59
  def define_task
54
- desc 'Run RubyCritic'
60
+ desc description
55
61
  task(name) { run_task }
56
62
  end
57
63
 
58
64
  def run_task
59
- if verbose
60
- puts "\n\n!!! Running `#{name}` rake command\n"
61
- puts "!!! Inspecting #{paths} #{options.empty? ? '' : "with options #{options}"}\n\n"
62
- end
65
+ print_starting_up_output if verbose
63
66
  application = RubyCritic::Cli::Application.new(options_as_arguments + paths)
64
- application.execute
67
+ return unless application.execute.nonzero? && fail_on_error
68
+
69
+ abort('RubyCritic did not pass - exiting!')
70
+ end
71
+
72
+ def print_starting_up_output
73
+ puts "\n\n!!! Running `#{name}` rake command\n"
74
+ puts "!!! Inspecting #{paths} #{options.empty? ? '' : "with options #{options}"}\n\n"
65
75
  end
66
76
 
67
77
  def options_as_arguments
@@ -6,7 +6,7 @@ require 'shellwords'
6
6
  module RubyCritic
7
7
  module SourceControlSystem
8
8
  class Base
9
- @@systems = []
9
+ @@systems = [] # rubocop:disable Style/ClassVars
10
10
 
11
11
  def self.register_system
12
12
  @@systems << self
@@ -21,10 +21,11 @@ module RubyCritic
21
21
  end
22
22
 
23
23
  class Churn
24
- def initialize
24
+ def initialize(churn_after: nil)
25
25
  @renames = Renames.new
26
26
  @date = nil
27
27
  @stats = {}
28
+ @churn_after = churn_after
28
29
 
29
30
  call
30
31
  end
@@ -41,12 +42,17 @@ module RubyCritic
41
42
 
42
43
  def call
43
44
  Git
44
- .git("log --all --date=iso --follow --format='format:date:%x09%ad' --name-status .")
45
+ .git(git_log_command)
45
46
  .split("\n")
46
47
  .reject(&:empty?)
47
48
  .each { |line| process_line(line) }
48
49
  end
49
50
 
51
+ def git_log_command
52
+ after_clause = @churn_after ? "--after='#{@churn_after}' " : ''
53
+ "log --all --date=iso --follow --format='format:date:%x09%ad' --name-status #{after_clause}."
54
+ end
55
+
50
56
  def process_line(line)
51
57
  operation, *rest = line.split("\t")
52
58
 
@@ -30,7 +30,7 @@ module RubyCritic
30
30
  end
31
31
 
32
32
  def churn
33
- @churn ||= Churn.new
33
+ @churn ||= Churn.new(churn_after: Config.churn_after)
34
34
  end
35
35
 
36
36
  def revisions_count(path)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyCritic
4
- VERSION = '4.5.2'.freeze
4
+ VERSION = '4.7.0'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubycritic
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.5.2
4
+ version: 4.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guilherme Simoes
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-04 00:00:00.000000000 Z
11
+ date: 2022-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: flay
@@ -270,20 +270,20 @@ dependencies:
270
270
  requirements:
271
271
  - - "~>"
272
272
  - !ruby/object:Gem::Version
273
- version: '0.10'
274
- - - ">="
273
+ version: 1.3.2
274
+ - - "<"
275
275
  - !ruby/object:Gem::Version
276
- version: 0.10.0
276
+ version: 2.0.0
277
277
  type: :development
278
278
  prerelease: false
279
279
  version_requirements: !ruby/object:Gem::Requirement
280
280
  requirements:
281
281
  - - "~>"
282
282
  - !ruby/object:Gem::Version
283
- version: '0.10'
284
- - - ">="
283
+ version: 1.3.2
284
+ - - "<"
285
285
  - !ruby/object:Gem::Version
286
- version: 0.10.0
286
+ version: 2.0.0
287
287
  - !ruby/object:Gem::Dependency
288
288
  name: mdl
289
289
  requirement: !ruby/object:Gem::Requirement
@@ -302,9 +302,6 @@ dependencies:
302
302
  name: minitest
303
303
  requirement: !ruby/object:Gem::Requirement
304
304
  requirements:
305
- - - "~>"
306
- - !ruby/object:Gem::Version
307
- version: '5.3'
308
305
  - - ">="
309
306
  - !ruby/object:Gem::Version
310
307
  version: 5.3.0
@@ -312,9 +309,6 @@ dependencies:
312
309
  prerelease: false
313
310
  version_requirements: !ruby/object:Gem::Requirement
314
311
  requirements:
315
- - - "~>"
316
- - !ruby/object:Gem::Version
317
- version: '5.3'
318
312
  - - ">="
319
313
  - !ruby/object:Gem::Version
320
314
  version: 5.3.0
@@ -378,6 +372,20 @@ dependencies:
378
372
  - - ">="
379
373
  - !ruby/object:Gem::Version
380
374
  version: 11.0.0
375
+ - !ruby/object:Gem::Dependency
376
+ name: rexml
377
+ requirement: !ruby/object:Gem::Requirement
378
+ requirements:
379
+ - - ">="
380
+ - !ruby/object:Gem::Version
381
+ version: 3.2.0
382
+ type: :development
383
+ prerelease: false
384
+ version_requirements: !ruby/object:Gem::Requirement
385
+ requirements:
386
+ - - ">="
387
+ - !ruby/object:Gem::Version
388
+ version: 3.2.0
381
389
  - !ruby/object:Gem::Dependency
382
390
  name: rubocop
383
391
  requirement: !ruby/object:Gem::Requirement
@@ -448,35 +456,35 @@ files:
448
456
  - lib/rubycritic/core/rating.rb
449
457
  - lib/rubycritic/core/smell.rb
450
458
  - lib/rubycritic/generators/console_report.rb
451
- - lib/rubycritic/generators/html/assets/fonts/FontAwesome.otf
452
459
  - lib/rubycritic/generators/html/assets/fonts/Roboto-Medium.ttf
453
460
  - lib/rubycritic/generators/html/assets/fonts/Roboto-Regular.ttf
454
- - lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.eot
455
- - lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.svg
456
- - lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.ttf
457
- - lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.woff
458
- - lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.woff2
459
- - lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.eot
460
- - lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.svg
461
- - lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.ttf
462
- - lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.woff
463
- - lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.woff2
464
461
  - lib/rubycritic/generators/html/assets/images/logo.png
465
462
  - lib/rubycritic/generators/html/assets/javascripts/application.js
466
- - lib/rubycritic/generators/html/assets/javascripts/bootstrap.min.js
467
- - lib/rubycritic/generators/html/assets/javascripts/highcharts.src-4.0.1.js
468
- - lib/rubycritic/generators/html/assets/javascripts/jquery.filtertable.min.js
469
- - lib/rubycritic/generators/html/assets/javascripts/jquery.min.js
470
- - lib/rubycritic/generators/html/assets/javascripts/jquery.scrollTo.min.js
471
- - lib/rubycritic/generators/html/assets/javascripts/jquery.tablesorter.js
472
- - lib/rubycritic/generators/html/assets/javascripts/jquery.tablesorter.min.js
473
- - lib/rubycritic/generators/html/assets/javascripts/jquery.timeago.js
474
- - lib/rubycritic/generators/html/assets/javascripts/prettify.js
475
463
  - lib/rubycritic/generators/html/assets/stylesheets/application.css
476
- - lib/rubycritic/generators/html/assets/stylesheets/bootstrap.min.css
477
- - lib/rubycritic/generators/html/assets/stylesheets/font-awesome.min.css
478
- - lib/rubycritic/generators/html/assets/stylesheets/prettify.css
479
- - lib/rubycritic/generators/html/assets/stylesheets/prettify.custom_theme.css
464
+ - lib/rubycritic/generators/html/assets/vendor/fonts/FontAwesome.otf
465
+ - lib/rubycritic/generators/html/assets/vendor/fonts/fontawesome-webfont.eot
466
+ - lib/rubycritic/generators/html/assets/vendor/fonts/fontawesome-webfont.svg
467
+ - lib/rubycritic/generators/html/assets/vendor/fonts/fontawesome-webfont.ttf
468
+ - lib/rubycritic/generators/html/assets/vendor/fonts/fontawesome-webfont.woff
469
+ - lib/rubycritic/generators/html/assets/vendor/fonts/fontawesome-webfont.woff2
470
+ - lib/rubycritic/generators/html/assets/vendor/fonts/glyphicons-halflings-regular.eot
471
+ - lib/rubycritic/generators/html/assets/vendor/fonts/glyphicons-halflings-regular.svg
472
+ - lib/rubycritic/generators/html/assets/vendor/fonts/glyphicons-halflings-regular.ttf
473
+ - lib/rubycritic/generators/html/assets/vendor/fonts/glyphicons-halflings-regular.woff
474
+ - lib/rubycritic/generators/html/assets/vendor/fonts/glyphicons-halflings-regular.woff2
475
+ - lib/rubycritic/generators/html/assets/vendor/javascripts/bootstrap.min.js
476
+ - lib/rubycritic/generators/html/assets/vendor/javascripts/highcharts.src-4.0.1.js
477
+ - lib/rubycritic/generators/html/assets/vendor/javascripts/jquery.filtertable.min.js
478
+ - lib/rubycritic/generators/html/assets/vendor/javascripts/jquery.min.js
479
+ - lib/rubycritic/generators/html/assets/vendor/javascripts/jquery.scrollTo.min.js
480
+ - lib/rubycritic/generators/html/assets/vendor/javascripts/jquery.tablesorter.js
481
+ - lib/rubycritic/generators/html/assets/vendor/javascripts/jquery.tablesorter.min.js
482
+ - lib/rubycritic/generators/html/assets/vendor/javascripts/jquery.timeago.js
483
+ - lib/rubycritic/generators/html/assets/vendor/javascripts/prettify.js
484
+ - lib/rubycritic/generators/html/assets/vendor/stylesheets/bootstrap.min.css
485
+ - lib/rubycritic/generators/html/assets/vendor/stylesheets/font-awesome.min.css
486
+ - lib/rubycritic/generators/html/assets/vendor/stylesheets/prettify.css
487
+ - lib/rubycritic/generators/html/assets/vendor/stylesheets/prettify.custom_theme.css
480
488
  - lib/rubycritic/generators/html/base.rb
481
489
  - lib/rubycritic/generators/html/code_file.rb
482
490
  - lib/rubycritic/generators/html/code_index.rb
@@ -519,7 +527,7 @@ homepage: https://github.com/whitesmith/rubycritic
519
527
  licenses:
520
528
  - MIT
521
529
  metadata: {}
522
- post_install_message:
530
+ post_install_message:
523
531
  rdoc_options: []
524
532
  require_paths:
525
533
  - lib
@@ -534,8 +542,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
534
542
  - !ruby/object:Gem::Version
535
543
  version: '0'
536
544
  requirements: []
537
- rubygems_version: 3.1.3
538
- signing_key:
545
+ rubygems_version: 3.2.15
546
+ signing_key:
539
547
  specification_version: 4
540
548
  summary: RubyCritic is a Ruby code quality reporter
541
549
  test_files: []