rubycritic 3.1.0 → 3.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: bf20b3c6aba1b1063bb8485305bf26e942fbd784
4
- data.tar.gz: cdb7f733d4376905de9845a930abd41367e0d561
3
+ metadata.gz: 0555c63872e8ba208eed9e2b2ba2e409b6bcc2af
4
+ data.tar.gz: 4ec5b4de84de9b3f9ab6c864d9cf1056f38c07b8
5
5
  SHA512:
6
- metadata.gz: 893f288ebe082485d63eb7534e322320e139f0daa48d038acb9fe02bd48c76ce26721858e98ddccffd157e0e66babe253d0263968018392b244849ad5e1945c5
7
- data.tar.gz: 05e1a071d9fdfab5b6b7eaed3d13fea7ae45b8f1a848ba005565321d37ba657c676874ff5db8fd6ccc0014345003afbedf72793adad152e5284ebda281b09e35
6
+ metadata.gz: 652e9d64e4ac113cb346833907e4d05b289f98f236aaa52970b40f9d472b38bf56bcb48fff30fc31d4e4774f28740dbbfafc5950a75c356d6bc3894b0dbf00bc
7
+ data.tar.gz: 20d381594ebb3ab984e95e0d62b00086ea379f119bbbd63698c51439f8e8b7ce83145b5d9bfba57d1d5c4e2868dee0cea239d5b3ef40d961decae640de9d240f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 3.1.1 / 2016-12-01
2
+
3
+ * [FEATURE] Implement search and filter on code and smells view (rohitcy)
4
+ * [CHANGE] Use Ruby's File instead of `wc` system command (by tejasbubane)
5
+ * [BUGFIX] Fix code navigation links in the new UI (by rohitcy)
6
+ * [BUGFIX] Add missing method 'head_reference' for Perforce source control (Rataah)
7
+
1
8
  # 3.1.0 / 2016-11-23
2
9
 
3
10
  * [FEATURE] Support for Perforce source control system (by Loic Gudet)
data/README.md CHANGED
@@ -5,7 +5,7 @@ RubyCritic
5
5
  [![Build Status](https://travis-ci.org/whitesmith/rubycritic.svg?branch=master)](https://travis-ci.org/whitesmith/rubycritic)
6
6
  [![Code Climate](https://codeclimate.com/github/whitesmith/rubycritic/badges/gpa.svg)](https://codeclimate.com/github/whitesmith/rubycritic)
7
7
 
8
- <img src="http://i.imgur.com/66HACCD.png" alt="RubyCritic Icon" align="right" />
8
+ <img src="/images/logo.png" alt="RubyCritic Icon" align="right" />
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
 
11
11
  **Table of Contents**
@@ -28,15 +28,15 @@ This gem provides features such as:
28
28
 
29
29
  1. An overview of your project:
30
30
 
31
- ![RubyCritic overview screenshot](http://i.imgur.com/oiE5O3X.png)
31
+ ![RubyCritic overview screenshot](/images/overview.png)
32
32
 
33
33
  2. An index of the project files with their respective number of smells:
34
34
 
35
- ![RubyCritic code index screenshot](http://i.imgur.com/a0GCn48.png)
35
+ ![RubyCritic code index screenshot](/images/code.png)
36
36
 
37
37
  3. An index of the smells detected:
38
38
 
39
- ![RubyCritic smells index screenshot](http://i.imgur.com/PvkFEe3.png)
39
+ ![RubyCritic smells index screenshot](/images/smells.png)
40
40
 
41
41
  4. When analysing code like the following:
42
42
 
@@ -52,11 +52,11 @@ This gem provides features such as:
52
52
 
53
53
  It basically turns something like this:
54
54
 
55
- ![Reek output screenshot](http://i.imgur.com/5G2zPIC.png)
55
+ ![Reek output screenshot](/images/reek.png)
56
56
 
57
57
  Into something like this:
58
58
 
59
- ![RubyCritic file code screenshot](http://i.imgur.com/RNzXewk.png)
59
+ ![RubyCritic file code screenshot](/images/smell-details.png)
60
60
 
61
61
  5. It uses your source control system (only Git, Mercurial and Perforce
62
62
  are currently supported) to compare your currently uncommitted
@@ -215,7 +215,7 @@ The current core team consists of:
215
215
 
216
216
  ## Credits
217
217
 
218
- ![Whitesmith](http://i.imgur.com/Si2l3kd.png)
218
+ ![Whitesmith](/images/whitesmith.png)
219
219
 
220
220
  RubyCritic is maintained and funded by [Whitesmith][9]. Tweet your questions or suggestions to [@Whitesmithco][10].
221
221
 
data/docs/core-metrics.md CHANGED
@@ -3,7 +3,7 @@
3
3
  RubyCritic wraps around static analysis gems such as [Reek][2], [Flay][3] and [Flog][4] to provide a quality report of your Ruby code.
4
4
 
5
5
  Each of these gems are internally wrapped as an **Analyser**, with a collection of **AnalysedModule**s, which give us calculations of key metrics.
6
- The most important ones are **churn**, **complexity**, **cost** and **rating**.
6
+ The most important ones are **churn**, **complexity**, **cost** and **rating**.
7
7
 
8
8
  The output of RubyCritic will give you four values to help you judge your code's _odorousness_:
9
9
 
@@ -40,7 +40,7 @@ Complexity is the output of [Flog][4]. You can [read more about how it works][7]
40
40
 
41
41
  Both **churn** and **complexity** are presented as a chart:
42
42
 
43
- ![RubyCritic overview screenshot](http://i.imgur.com/oiE5O3X.png)
43
+ ![RubyCritic overview screenshot](/images/churn-vs-complexity.png)
44
44
 
45
45
  Each file is represented by a dot. **The closer they are to the bottom-left corner, the better.**
46
46
  But keep in mind that you cannot reduce churn (well... not unless you re-write your repo's history :neckbeard:), so try to keep the dots as close to the bottom as possible.
@@ -54,7 +54,7 @@ Generally `A`'s & `B`'s are good enough, `C`'s serve as a warning and `D`'s & `F
54
54
 
55
55
  **Rating** is simply [a conversion][5] from the calculated **cost** to a letter.
56
56
 
57
- ![RubyCritic code index screenshot](http://i.imgur.com/a0GCn48.png)
57
+ ![RubyCritic code index screenshot](/images/rating.png)
58
58
 
59
59
  ### Cost
60
60
 
Binary file
data/images/code.png ADDED
Binary file
data/images/logo.png ADDED
Binary file
Binary file
data/images/rating.png ADDED
Binary file
data/images/reek.png ADDED
Binary file
Binary file
data/images/smells.png ADDED
Binary file
Binary file
@@ -32,7 +32,7 @@ module RubyCritic
32
32
  end
33
33
 
34
34
  def line_count
35
- `wc -l "#{path}"`.strip.split(' ')[0].to_i
35
+ File.read(path).each_line.count
36
36
  end
37
37
 
38
38
  def cost
@@ -168,8 +168,6 @@ function getRatingWiseCount(rating){
168
168
  return count;
169
169
  };
170
170
 
171
- emphasizeLineFromFragment();
172
-
173
171
  function emphasizeLineFromFragment() {
174
172
  emphasizeLine(window.location.hash)
175
173
  }
@@ -195,12 +193,11 @@ function emphasizeLine(lineReference) {
195
193
  }
196
194
 
197
195
  function scrollToTarget(lineReference) {
196
+ window.location.hash = lineReference;
198
197
  $.scrollTo(lineReference, {
199
198
  duration: 300,
200
199
  easing: "linear",
201
- onAfter: function() {
202
- window.location.hash = lineReference;
203
- }
200
+ offset: {top: -87}
204
201
  });
205
202
  }
206
203
 
@@ -251,3 +248,20 @@ $(function(){
251
248
  }
252
249
  });
253
250
  });
251
+
252
+ function assignIdsToCodeLines(){
253
+ $($('.linenums')[1]).children().each(function(index){
254
+ $(this).attr('id', "L" + index)
255
+ });
256
+ };
257
+
258
+ $(document).ready(function(){
259
+ assignIdsToCodeLines();
260
+ emphasizeLineFromFragment();
261
+ initTableFilters();
262
+ });
263
+
264
+ var initTableFilters = function() {
265
+ $("#codeTable").filterTable({ignoreColumns: [2], placeholder: 'Filter by Name'});
266
+ $("#js-index-table").filterTable({ignoreColumns: [2, 3, 4, 5], placeholder: 'Filter by Smell or Location', inputSelector: 'form-control'});
267
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * jquery.filterTable
3
+ *
4
+ * This plugin will add a search filter to tables. When typing in the filter,
5
+ * any rows that do not contain the filter will be hidden.
6
+ *
7
+ * Utilizes bindWithDelay() if available. https://github.com/bgrins/bindWithDelay
8
+ *
9
+ * @version v1.5.6
10
+ * @author Sunny Walker, swalker@hawaii.edu
11
+ * @license MIT
12
+ */
13
+ !function($){var e=$.fn.jquery.split("."),t=parseFloat(e[0]),n=parseFloat(e[1]);2>t&&8>n?($.expr[":"].filterTableFind=function(e,t,n){return $(e).text().toUpperCase().indexOf(n[3].toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0},$.expr[":"].filterTableFindAny=function(e,t,n){var i=n[3].split(/[\s,]/),r=[];return $.each(i,function(e,t){var n=t.replace(/^\s+|\s$/g,"");n&&r.push(n)}),r.length?function(e){var t=!1;return $.each(r,function(n,i){return $(e).text().toUpperCase().indexOf(i.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0?(t=!0,!1):void 0}),t}:!1},$.expr[":"].filterTableFindAll=function(e,t,n){var i=n[3].split(/[\s,]/),r=[];return $.each(i,function(e,t){var n=t.replace(/^\s+|\s$/g,"");n&&r.push(n)}),r.length?function(e){var t=0;return $.each(r,function(n,i){$(e).text().toUpperCase().indexOf(i.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0&&t++}),t===r.length}:!1}):($.expr[":"].filterTableFind=jQuery.expr.createPseudo(function(e){return function(t){return $(t).text().toUpperCase().indexOf(e.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0}}),$.expr[":"].filterTableFindAny=jQuery.expr.createPseudo(function(e){var t=e.split(/[\s,]/),n=[];return $.each(t,function(e,t){var i=t.replace(/^\s+|\s$/g,"");i&&n.push(i)}),n.length?function(e){var t=!1;return $.each(n,function(n,i){return $(e).text().toUpperCase().indexOf(i.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0?(t=!0,!1):void 0}),t}:!1}),$.expr[":"].filterTableFindAll=jQuery.expr.createPseudo(function(e){var t=e.split(/[\s,]/),n=[];return $.each(t,function(e,t){var i=t.replace(/^\s+|\s$/g,"");i&&n.push(i)}),n.length?function(e){var t=0;return $.each(n,function(n,i){$(e).text().toUpperCase().indexOf(i.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0&&t++}),t===n.length}:!1})),$.fn.filterTable=function(e){var t={autofocus:!1,callback:null,containerClass:"filter-table",containerTag:"p",filterExpression:"filterTableFind",hideTFootOnFilter:!1,highlightClass:"alt",ignoreClass:"",ignoreColumns:[],inputSelector:null,inputName:"",inputType:"search",label:"Filter:",minChars:1,minRows:8,placeholder:"search this table",preventReturnKey:!0,quickList:[],quickListClass:"quick",quickListGroupTag:"",quickListTag:"a",visibleClass:"visible"},n=function(e){return e.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},i=$.extend({},t,e),r=function(e,t){var n=e.find("tbody");if(""===t||t.length<i.minChars)n.find("tr").show().addClass(i.visibleClass),n.find("td").removeClass(i.highlightClass),i.hideTFootOnFilter&&e.find("tfoot").show();else{var r=n.find("td");if(n.find("tr").hide().removeClass(i.visibleClass),r.removeClass(i.highlightClass),i.hideTFootOnFilter&&e.find("tfoot").hide(),i.ignoreColumns.length){var a=[];i.ignoreClass&&(r=r.not("."+i.ignoreClass)),a=r.filter(":"+i.filterExpression+'("'+t+'")'),a.each(function(){var e=$(this),t=e.parent().children().index(e);-1===$.inArray(t,i.ignoreColumns)&&e.addClass(i.highlightClass).closest("tr").show().addClass(i.visibleClass)})}else i.ignoreClass&&(r=r.not("."+i.ignoreClass)),r.filter(":"+i.filterExpression+'("'+t+'")').addClass(i.highlightClass).closest("tr").show().addClass(i.visibleClass)}i.callback&&i.callback(t,e)};return this.each(function(){var e=$(this),t=e.find("tbody"),a=null,l=null,s=null,o=!0;"TABLE"===e[0].nodeName&&t.length>0&&(0===i.minRows||i.minRows>0&&t.find("tr").length>=i.minRows)&&!e.prev().hasClass(i.containerClass)&&(i.inputSelector&&1===$(i.inputSelector).length?(s=$(i.inputSelector),a=s.parent(),o=!1):(a=$("<"+i.containerTag+" />"),""!==i.containerClass&&a.addClass(i.containerClass),a.prepend(i.label+" "),s=$('<input type="'+i.inputType+'" placeholder="'+i.placeholder+'" name="'+i.inputName+'" />'),i.preventReturnKey&&s.on("keydown",function(e){return 13===(e.keyCode||e.which)?(e.preventDefault(),!1):void 0})),i.autofocus&&s.attr("autofocus",!0),$.fn.bindWithDelay?s.bindWithDelay("keyup",function(){r(e,$(this).val())},200):s.bind("keyup",function(){r(e,$(this).val())}),s.bind("click search input paste blur",function(){r(e,$(this).val())}),o&&a.append(s),i.quickList.length>0&&(l=i.quickListGroupTag?$("<"+i.quickListGroupTag+" />"):a,$.each(i.quickList,function(e,t){var r=$("<"+i.quickListTag+' class="'+i.quickListClass+'" />');r.text(n(t)),"A"===r[0].nodeName&&r.attr("href","#"),r.bind("click",function(e){e.preventDefault(),s.val(t).focus().trigger("click")}),l.append(r)}),l!==a&&a.append(l)),o&&e.before(a))})}}(jQuery);
@@ -526,3 +526,21 @@ span.metric {
526
526
  display: inline-block;
527
527
  margin-left: 20px;
528
528
  }
529
+
530
+ .filter-table {
531
+ text-align: right;
532
+ }
533
+
534
+ .filter-table input {
535
+ width: 200px;
536
+ display: inline;
537
+ height: 34px;
538
+ padding: 6px 12px;
539
+ font-size: 14px;
540
+ line-height: 1.42857143;
541
+ color: #555;
542
+ background-color: #fff;
543
+ background-image: none;
544
+ border: 1px solid #ccc;
545
+ border-radius: 4px;
546
+ }
@@ -52,5 +52,6 @@
52
52
  <%= javascript_tag(:'prettify') %>
53
53
  <%= javascript_tag(:'bootstrap.min') %>
54
54
  <%= javascript_tag(:application) %>
55
+ <%= javascript_tag(:'jquery.filtertable.min') %>
55
56
  </body>
56
57
  </html>
@@ -2,20 +2,22 @@
2
2
 
3
3
  <div class="nocode errors smells">
4
4
  <% @smells.each do |smell| %>
5
- <div class="description">
6
- <div class="heading">
7
- <span>
8
- <i class="fa fa-warning" aria-hidden"true"=""></i>
9
- <a href="<%= smell.doc_url %>" target="_blank"><b><%= smell.type %></b></a>
10
- </span>
11
- </div>
12
- <span><%= "#{smell.context} #{smell.message}" %></span>
13
- <% if smell.multiple_locations? %>
14
- <span>Locations:</span>
15
- <% smell.locations.each_with_index do |location, index| %>
16
- <a href="<%= smell_location_path(location) %>" class="js-smell-location"><%= index %></a>
5
+ <li>
6
+ <div class="description">
7
+ <div class="heading">
8
+ <span>
9
+ <i class="fa fa-warning" aria-hidden"true"=""></i>
10
+ <a href="<%= smell.doc_url %>" target="_blank"><b><%= smell.type %></b></a>
11
+ </span>
12
+ </div>
13
+ <span><%= "#{smell.context} #{smell.message}" %></span>
14
+ <% if smell.multiple_locations? %>
15
+ <span>Locations:</span>
16
+ <% smell.locations.each_with_index do |location, index| %>
17
+ <a href="<%= smell_location_path(location) %>" class="js-smell-location"><%= index %></a>
18
+ <% end %>
17
19
  <% end %>
18
- <% end %>
19
- </div>
20
+ </div>
21
+ </li>
20
22
  <% end %>
21
23
  </div>
@@ -3,7 +3,8 @@ require 'date'
3
3
 
4
4
  module RubyCritic
5
5
  module SourceControlSystem
6
- PerforceStats = Struct.new(:filename, :revision, :last_commit, :opened?)
6
+ PERFORCE_FSTAT_OPTS = '-F "clientFile=*.rb" -T clientFile,headRev,headTime,headChange,action'.freeze
7
+ PerforceStats = Struct.new(:filename, :revision, :last_commit, :opened?, :head)
7
8
 
8
9
  class Perforce < Base
9
10
  register_system
@@ -53,12 +54,16 @@ module RubyCritic
53
54
  !perforce_files.values.count(&:opened?).zero?
54
55
  end
55
56
 
57
+ def head_reference
58
+ perforce_files.values.map(&:head).max_by(&:to_i)
59
+ end
60
+
56
61
  def self.build_file_cache
57
62
  # Chun is very slow if files stats are requested one by one
58
63
  # this fill a hash with the result of all ruby file in the current directory (and sub-directories)
59
64
  {}.tap do |file_cache|
60
65
  line_aggregator = []
61
- `p4 fstat -F "clientFile=*.rb" -T clientFile,headRev,headTime,action #{Dir.getwd}...`.each_line do |line|
66
+ `p4 fstat #{PERFORCE_FSTAT_OPTS} #{Dir.getwd}...`.each_line do |line|
62
67
  Perforce.compute_line(file_cache, line_aggregator, line)
63
68
  end
64
69
  # handle remaining lines
@@ -86,7 +91,8 @@ module RubyCritic
86
91
  Perforce.normalized_file_path(perforce_lines['clientFile']),
87
92
  perforce_lines['headRev'],
88
93
  perforce_lines['headTime'],
89
- perforce_lines.key?('action')
94
+ perforce_lines.key?('action'),
95
+ perforce_lines['headChange']
90
96
  )
91
97
  end
92
98
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyCritic
4
- VERSION = '3.1.0'.freeze
4
+ VERSION = '3.1.1'.freeze
5
5
  end
data/rubycritic.gemspec CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.add_runtime_dependency 'flay', '~> 2.8'
26
26
  spec.add_runtime_dependency 'flog', '~> 4.4'
27
27
  spec.add_runtime_dependency 'reek', '~> 4.4'
28
- spec.add_runtime_dependency 'parser', '2.3.1.4'
28
+ spec.add_runtime_dependency 'parser', '2.3.3.1'
29
29
  spec.add_runtime_dependency 'ruby_parser', '~> 3.8'
30
30
  spec.add_runtime_dependency 'rainbow'
31
31
  spec.add_runtime_dependency 'launchy', '2.4.3'
@@ -110,11 +110,13 @@ Server address: the.server.address.com
110
110
  ... clientFile /path/to/client/a_ruby_file.rb
111
111
  ... headTime 1473075551
112
112
  ... headRev 16
113
+ ... headChange 2103503
113
114
 
114
115
  ... clientFile /path/to/client/second_ruby_file.rb
115
116
  ... headTime 1464601668
116
117
  ... action opened
117
118
  ... headRev 12
119
+ ... headChange 2103504
118
120
  END
119
121
  end
120
122
 
@@ -128,12 +130,14 @@ Server address: the.server.address.com
128
130
  first_file.filename.must_equal '/path/to/client/a_ruby_file.rb'
129
131
  first_file.revision.must_equal '16'
130
132
  first_file.last_commit.must_equal '1473075551'
133
+ first_file.head.must_equal '2103503'
131
134
  first_file.opened?.must_equal false
132
135
 
133
136
  second_file = file_cache['/path/to/client/second_ruby_file.rb']
134
137
  second_file.filename.must_equal '/path/to/client/second_ruby_file.rb'
135
138
  second_file.revision.must_equal '12'
136
139
  second_file.last_commit.must_equal '1464601668'
140
+ second_file.head.must_equal '2103504'
137
141
  second_file.opened?.must_equal true
138
142
  end
139
143
  end
@@ -157,6 +161,12 @@ Server address: the.server.address.com
157
161
  RubyCritic::SourceControlSystem::Perforce.stubs(:`).once.returns(p4_stats)
158
162
  @system.revision?.must_equal true
159
163
  end
164
+
165
+ it 'retrieves the head reference of the repository' do
166
+ Dir.stubs(:getwd).returns('/path/to/client')
167
+ RubyCritic::SourceControlSystem::Perforce.stubs(:`).once.returns(p4_stats)
168
+ @system.head_reference.must_equal '2103504'
169
+ end
160
170
  end
161
171
  end
162
172
  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: 3.1.0
4
+ version: 3.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guilherme Simoes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-23 00:00:00.000000000 Z
11
+ date: 2016-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: virtus
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 2.3.1.4
75
+ version: 2.3.3.1
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 2.3.1.4
82
+ version: 2.3.3.1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: ruby_parser
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -265,6 +265,15 @@ files:
265
265
  - features/step_definitions/rubycritic_steps.rb
266
266
  - features/step_definitions/sample_file_steps.rb
267
267
  - features/support/env.rb
268
+ - images/churn-vs-complexity.png
269
+ - images/code.png
270
+ - images/logo.png
271
+ - images/overview.png
272
+ - images/rating.png
273
+ - images/reek.png
274
+ - images/smell-details.png
275
+ - images/smells.png
276
+ - images/whitesmith.png
268
277
  - lib/rubycritic.rb
269
278
  - lib/rubycritic/analysers/attributes.rb
270
279
  - lib/rubycritic/analysers/churn.rb
@@ -316,6 +325,7 @@ files:
316
325
  - lib/rubycritic/generators/html/assets/javascripts/application.js
317
326
  - lib/rubycritic/generators/html/assets/javascripts/bootstrap.min.js
318
327
  - lib/rubycritic/generators/html/assets/javascripts/highcharts.src-4.0.1.js
328
+ - lib/rubycritic/generators/html/assets/javascripts/jquery.filtertable.min.js
319
329
  - lib/rubycritic/generators/html/assets/javascripts/jquery.min.js
320
330
  - lib/rubycritic/generators/html/assets/javascripts/jquery.scrollTo.min.js
321
331
  - lib/rubycritic/generators/html/assets/javascripts/jquery.tablesorter.js