rubycritic 3.0.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +9 -0
  4. data/README.md +9 -6
  5. data/ROADMAP.md +56 -0
  6. data/docs/building-own-code-climate.md +4 -0
  7. data/features/command_line_interface/minimum_score.feature +1 -1
  8. data/features/command_line_interface/options.feature +1 -1
  9. data/lib/rubycritic/analysis_summary.rb +40 -0
  10. data/lib/rubycritic/cli/options.rb +1 -1
  11. data/lib/rubycritic/core/analysed_module.rb +20 -0
  12. data/lib/rubycritic/core/analysed_modules_collection.rb +8 -0
  13. data/lib/rubycritic/generators/html/assets/fonts/FontAwesome.otf +0 -0
  14. data/lib/rubycritic/generators/html/assets/fonts/Roboto-Medium.ttf +0 -0
  15. data/lib/rubycritic/generators/html/assets/fonts/Roboto-Regular.ttf +0 -0
  16. data/lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.eot +0 -0
  17. data/lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.svg +2671 -0
  18. data/lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.ttf +0 -0
  19. data/lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.woff +0 -0
  20. data/lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.woff2 +0 -0
  21. data/lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  22. data/lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.svg +288 -0
  23. data/lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  24. data/lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  25. data/lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.woff2 +0 -0
  26. data/lib/rubycritic/generators/html/assets/images/logo.png +0 -0
  27. data/lib/rubycritic/generators/html/assets/javascripts/application.js +221 -72
  28. data/lib/rubycritic/generators/html/assets/javascripts/bootstrap.min.js +7 -0
  29. data/lib/rubycritic/generators/html/assets/javascripts/jquery.min.js +4 -0
  30. data/lib/rubycritic/generators/html/assets/javascripts/jquery.scrollTo.min.js +7 -0
  31. data/lib/rubycritic/generators/html/assets/javascripts/jquery.tablesorter.js +1031 -2089
  32. data/lib/rubycritic/generators/html/assets/javascripts/jquery.tablesorter.min.js +4 -0
  33. data/lib/rubycritic/generators/html/assets/javascripts/{jquery.timeago-v1.4.1.js → jquery.timeago.js} +31 -14
  34. data/lib/rubycritic/generators/html/assets/javascripts/prettify.js +46 -0
  35. data/lib/rubycritic/generators/html/assets/stylesheets/application.css +422 -197
  36. data/lib/rubycritic/generators/html/assets/stylesheets/bootstrap.min.css +6 -0
  37. data/lib/rubycritic/generators/html/assets/stylesheets/font-awesome.min.css +4 -0
  38. data/lib/rubycritic/generators/html/assets/stylesheets/prettify.css +1 -0
  39. data/lib/rubycritic/generators/html/overview.rb +2 -0
  40. data/lib/rubycritic/generators/html/templates/code_file.html.erb +56 -33
  41. data/lib/rubycritic/generators/html/templates/code_index.html.erb +45 -30
  42. data/lib/rubycritic/generators/html/templates/layouts/application.html.erb +43 -21
  43. data/lib/rubycritic/generators/html/templates/overview.html.erb +62 -7
  44. data/lib/rubycritic/generators/html/templates/smells_index.html.erb +47 -26
  45. data/lib/rubycritic/generators/html/templates/smelly_line.html.erb +16 -12
  46. data/lib/rubycritic/generators/html/turbulence.rb +2 -2
  47. data/lib/rubycritic/generators/html/view_helpers.rb +4 -0
  48. data/lib/rubycritic/source_control_systems/base.rb +1 -0
  49. data/lib/rubycritic/source_control_systems/perforce.rb +108 -0
  50. data/lib/rubycritic/version.rb +1 -1
  51. data/rubycritic.gemspec +1 -1
  52. data/test/analysers_test_helper.rb +7 -0
  53. data/test/lib/rubycritic/analysis_summary_test.rb +29 -0
  54. data/test/lib/rubycritic/generators/console_report_test.rb +3 -3
  55. data/test/lib/rubycritic/source_control_systems/perforce_test.rb +162 -0
  56. metadata +34 -9
  57. data/lib/rubycritic/generators/html/assets/javascripts/jquery-2.1.0.js +0 -9111
  58. data/lib/rubycritic/generators/html/assets/javascripts/jquery.floatThead-v1.2.7.js +0 -754
  59. data/lib/rubycritic/generators/html/assets/javascripts/jquery.scrollTo-1.4.11.js +0 -186
  60. data/lib/rubycritic/generators/html/assets/javascripts/prettify-4-Mar-2013.js +0 -1662
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  require 'json'
3
-
4
3
  module RubyCritic
5
4
  module Turbulence
6
5
  def self.data(analysed_modules)
@@ -8,7 +7,8 @@ module RubyCritic
8
7
  {
9
8
  name: analysed_module.name,
10
9
  x: analysed_module.churn,
11
- y: analysed_module.complexity
10
+ y: analysed_module.complexity,
11
+ rating: analysed_module.rating
12
12
  }
13
13
  end.to_json
14
14
  end
@@ -17,6 +17,10 @@ module RubyCritic
17
17
  relative_path("assets/#{file}")
18
18
  end
19
19
 
20
+ def image_path(file)
21
+ asset_path("images/#{file}")
22
+ end
23
+
20
24
  def file_path(file)
21
25
  relative_path(file)
22
26
  end
@@ -34,3 +34,4 @@ end
34
34
  require 'rubycritic/source_control_systems/double'
35
35
  require 'rubycritic/source_control_systems/git'
36
36
  require 'rubycritic/source_control_systems/mercurial'
37
+ require 'rubycritic/source_control_systems/perforce'
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+ require 'date'
3
+
4
+ module RubyCritic
5
+ module SourceControlSystem
6
+ PerforceStats = Struct.new(:filename, :revision, :last_commit, :opened?)
7
+
8
+ class Perforce < Base
9
+ register_system
10
+
11
+ def self.supported?
12
+ p4_client = ENV['P4CLIENT'] || ''
13
+ p4_installed? && !p4_client.empty? && in_client_directory?
14
+ end
15
+
16
+ def self.p4_installed?
17
+ p4_exe = Gem.win_platform? ? 'p4.exe' : 'p4'
18
+ ENV['PATH'].split(File::PATH_SEPARATOR).any? do |directory|
19
+ File.executable?(File.join(directory, p4_exe))
20
+ end
21
+ end
22
+
23
+ def self.in_client_directory?
24
+ p4_info = `p4 info`.each_line.select do |line|
25
+ line.start_with?('Client root', 'Current directory')
26
+ end
27
+
28
+ client_directory, current_directory = p4_info.map! { |info| info.split(': ').last.chomp }
29
+ child?(client_directory, current_directory)
30
+ end
31
+
32
+ def self.child?(root, target)
33
+ root_size = root.size
34
+ target_size = target.size
35
+ return false if target_size < root_size
36
+ target[0...root_size] == root &&
37
+ (target_size == root_size || [File::ALT_SEPARATOR, File::SEPARATOR].include?(target[root_size]))
38
+ end
39
+
40
+ def self.to_s
41
+ 'Perforce'
42
+ end
43
+
44
+ def revisions_count(path)
45
+ perforce_files[Perforce.key_file(path)].revision.to_i
46
+ end
47
+
48
+ def date_of_last_commit(path)
49
+ DateTime.strptime(perforce_files[Perforce.key_file(path)].last_commit, '%s').strftime('%Y-%m-%d %H:%M:%S %z')
50
+ end
51
+
52
+ def revision?
53
+ !perforce_files.values.count(&:opened?).zero?
54
+ end
55
+
56
+ def self.build_file_cache
57
+ # Chun is very slow if files stats are requested one by one
58
+ # this fill a hash with the result of all ruby file in the current directory (and sub-directories)
59
+ {}.tap do |file_cache|
60
+ line_aggregator = []
61
+ `p4 fstat -F "clientFile=*.rb" -T clientFile,headRev,headTime,action #{Dir.getwd}...`.each_line do |line|
62
+ Perforce.compute_line(file_cache, line_aggregator, line)
63
+ end
64
+ # handle remaining lines
65
+ Perforce.insert_file_cache(file_cache, line_aggregator) if line_aggregator.any?
66
+ end
67
+ end
68
+
69
+ def self.compute_line(file_cache, line_aggregator, line)
70
+ if line.chomp.empty?
71
+ Perforce.insert_file_cache(file_cache, line_aggregator)
72
+ else
73
+ line_aggregator << line
74
+ end
75
+ end
76
+
77
+ def self.insert_file_cache(file_cache, lines)
78
+ perforce_stat = Perforce.compute_cache_lines(lines)
79
+ file_cache[perforce_stat.filename] = perforce_stat
80
+ lines.clear
81
+ end
82
+
83
+ def self.compute_cache_lines(lines)
84
+ perforce_lines = Hash[*lines.map { |line| line.split[1..-1] }.flatten]
85
+ PerforceStats.new(
86
+ Perforce.normalized_file_path(perforce_lines['clientFile']),
87
+ perforce_lines['headRev'],
88
+ perforce_lines['headTime'],
89
+ perforce_lines.key?('action')
90
+ )
91
+ end
92
+
93
+ def self.key_file(source_file_path)
94
+ Perforce.normalized_file_path(File.join(Dir.getwd, source_file_path))
95
+ end
96
+
97
+ def self.normalized_file_path(file_path)
98
+ file_path.downcase.tr('\\', '/')
99
+ end
100
+
101
+ private
102
+
103
+ def perforce_files
104
+ @perforce_files ||= Perforce.build_file_cache
105
+ end
106
+ end
107
+ end
108
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyCritic
4
- VERSION = '3.0.0'.freeze
4
+ VERSION = '3.1.0'.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.2'
28
+ spec.add_runtime_dependency 'parser', '2.3.1.4'
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'
@@ -2,3 +2,10 @@
2
2
  require 'test_helper'
3
3
 
4
4
  class AnalysedModuleDouble < OpenStruct; end
5
+
6
+ require_relative '../lib/rubycritic/core/analysed_modules_collection'
7
+ class AnalysedModulesCollectionDouble < RubyCritic::AnalysedModulesCollection
8
+ def initialize(module_doubles)
9
+ @modules = module_doubles
10
+ end
11
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+ require 'rubycritic/analysis_summary'
4
+
5
+ module RubyCritic
6
+ describe AnalysisSummary do
7
+ before do
8
+ analysed_modules = AnalysedModulesCollectionDouble.new(
9
+ [
10
+ AnalysedModuleDouble.new(rating: 'A', churn: 2, smells: [:a, :b, :c]),
11
+ AnalysedModuleDouble.new(rating: 'A', churn: 3, smells: [:b]),
12
+ AnalysedModuleDouble.new(rating: 'A', churn: 4, smells: [:x, :y]),
13
+ AnalysedModuleDouble.new(rating: 'B', churn: 5, smells: [:a, :z])
14
+ ]
15
+ )
16
+ @summary = RubyCritic::AnalysisSummary.generate(analysed_modules)
17
+ end
18
+
19
+ describe '.root' do
20
+ it 'computes correct summary' do
21
+ @summary['A'].to_a.must_equal({ files: 3, churns: 9, smells: 6 }.to_a)
22
+ @summary['B'].to_a.must_equal({ files: 1, churns: 5, smells: 2 }.to_a)
23
+ @summary['C'].to_a.must_equal({ files: 0, churns: 0, smells: 0 }.to_a)
24
+ @summary['D'].to_a.must_equal({ files: 0, churns: 0, smells: 0 }.to_a)
25
+ @summary['F'].to_a.must_equal({ files: 0, churns: 0, smells: 0 }.to_a)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -28,15 +28,15 @@ describe RubyCritic::Generator::ConsoleReport do
28
28
  assert output_contains?('Rating', @mock_analysed_module.rating)
29
29
  end
30
30
 
31
- it "includes the module's rating in the report" do
31
+ it "includes the module's churn metric in the report" do
32
32
  assert output_contains?('Churn', @mock_analysed_module.churn)
33
33
  end
34
34
 
35
- it "includes the module's rating in the report" do
35
+ it "includes the module's complexity in the report" do
36
36
  assert output_contains?('Complexity', @mock_analysed_module.complexity)
37
37
  end
38
38
 
39
- it "includes the module's rating in the report" do
39
+ it "includes the module's duplication metric in the report" do
40
40
  assert output_contains?('Duplication', @mock_analysed_module.duplication)
41
41
  end
42
42
 
@@ -0,0 +1,162 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+ require 'rubycritic/source_control_systems/base'
4
+
5
+ describe RubyCritic::SourceControlSystem::Perforce do
6
+ before do
7
+ @system = RubyCritic::SourceControlSystem::Perforce.new
8
+ end
9
+
10
+ describe RubyCritic::SourceControlSystem::Perforce do
11
+ describe '::supported?' do
12
+ let(:path) do
13
+ ['/some/path', File::PATH_SEPARATOR, '/perforce/path/p4', File::PATH_SEPARATOR + '/other/useless_path'].join
14
+ end
15
+ let(:p4_client) { 'UNIT_TEST_CLIENT' }
16
+
17
+ context 'directory is under p4 client' do
18
+ it 'detects if Perforce is the source control used' do
19
+ ENV['PATH'] = path
20
+ ENV['P4CLIENT'] = p4_client
21
+ Gem.stubs(:win_platform?).returns(false)
22
+ File.stubs(:executable?).with('/some/path/p4').returns(false)
23
+ File.stubs(:executable?).with('/perforce/path/p4/p4').returns(true)
24
+ RubyCritic::SourceControlSystem::Perforce.stubs(:in_client_directory?).returns(true)
25
+
26
+ RubyCritic::SourceControlSystem::Perforce.supported?.must_equal true
27
+ end
28
+ end
29
+
30
+ context 'directory is not under p4 client' do
31
+ it 'returns false if no p4 executables are found' do
32
+ ENV['PATH'] = path
33
+ ENV['P4CLIENT'] = nil
34
+ Gem.stubs(:win_platform?).returns(false)
35
+ File.stubs(:executable?).with('/some/path/p4').returns(false)
36
+ File.stubs(:executable?).with('/perforce/path/p4/p4').returns(false)
37
+ File.stubs(:executable?).with('/other/useless_path/p4').returns(false)
38
+
39
+ RubyCritic::SourceControlSystem::Perforce.supported?.must_equal false
40
+ end
41
+
42
+ it 'returns false if no p4 client is set in environment variables' do
43
+ ENV['PATH'] = path
44
+ ENV['P4CLIENT'] = nil
45
+ Gem.stubs(:win_platform?).returns(false)
46
+ File.stubs(:executable?).with('/some/path/p4').returns(false)
47
+ File.stubs(:executable?).with('/perforce/path/p4/p4').returns(true)
48
+
49
+ RubyCritic::SourceControlSystem::Perforce.supported?.must_equal false
50
+ end
51
+
52
+ it 'returns false if the current directory is not under p4 client' do
53
+ ENV['PATH'] = path
54
+ ENV['P4CLIENT'] = p4_client
55
+ Gem.stubs(:win_platform?).returns(false)
56
+ File.stubs(:executable?).with('/some/path/p4').returns(false)
57
+ File.stubs(:executable?).with('/perforce/path/p4/p4').returns(true)
58
+ RubyCritic::SourceControlSystem::Perforce.stubs(:in_client_directory?).returns(false)
59
+
60
+ RubyCritic::SourceControlSystem::Perforce.supported?.must_equal false
61
+ end
62
+ end
63
+ end
64
+
65
+ describe '::in_client_directory?' do
66
+ context 'current directory is in p4 client' do
67
+ let(:p4_info) do
68
+ <<-END
69
+ User name: unit_test_user
70
+ Client name: UNIT_TEST_CLIENT
71
+ Client host: MACHINE_NAME
72
+ Client root: /path/to/client/root
73
+ Current directory: /path/to/client/root/ruby_project/unit_test
74
+ Peer address: 127.0.0.1::3000
75
+ Client address: 127.0.0.1
76
+ Server address: the.server.address.com
77
+ END
78
+ end
79
+
80
+ it 'calls p4 info and parse the result' do
81
+ RubyCritic::SourceControlSystem::Perforce.stubs(:`).with('p4 info').returns(p4_info)
82
+ RubyCritic::SourceControlSystem::Perforce.in_client_directory?.must_equal true
83
+ end
84
+ end
85
+
86
+ context 'current directory is not in p4 client' do
87
+ let(:p4_info) do
88
+ <<-END
89
+ User name: unit_test_user
90
+ Client name: UNIT_TEST_CLIENT
91
+ Client host: MACHINE_NAME
92
+ Client root: /path/to/client/root
93
+ Current directory: /somewhere/else/ruby_project/unit_test
94
+ Peer address: 127.0.0.1::3000
95
+ Client address: 127.0.0.1
96
+ Server address: the.server.address.com
97
+ END
98
+ end
99
+
100
+ it 'calls p4 info and parse the result' do
101
+ RubyCritic::SourceControlSystem::Perforce.stubs(:`).with('p4 info').returns(p4_info)
102
+ RubyCritic::SourceControlSystem::Perforce.in_client_directory?.must_equal false
103
+ end
104
+ end
105
+ end
106
+
107
+ describe 'retrieve informations' do
108
+ let(:p4_stats) do
109
+ <<-END
110
+ ... clientFile /path/to/client/a_ruby_file.rb
111
+ ... headTime 1473075551
112
+ ... headRev 16
113
+
114
+ ... clientFile /path/to/client/second_ruby_file.rb
115
+ ... headTime 1464601668
116
+ ... action opened
117
+ ... headRev 12
118
+ END
119
+ end
120
+
121
+ describe 'build_file_cache' do
122
+ it 'builds the perforce file cache' do
123
+ RubyCritic::SourceControlSystem::Perforce.stubs(:`).returns(p4_stats)
124
+ file_cache = @system.send(:perforce_files)
125
+ file_cache.size.must_equal 2
126
+
127
+ first_file = file_cache['/path/to/client/a_ruby_file.rb']
128
+ first_file.filename.must_equal '/path/to/client/a_ruby_file.rb'
129
+ first_file.revision.must_equal '16'
130
+ first_file.last_commit.must_equal '1473075551'
131
+ first_file.opened?.must_equal false
132
+
133
+ second_file = file_cache['/path/to/client/second_ruby_file.rb']
134
+ second_file.filename.must_equal '/path/to/client/second_ruby_file.rb'
135
+ second_file.revision.must_equal '12'
136
+ second_file.last_commit.must_equal '1464601668'
137
+ second_file.opened?.must_equal true
138
+ end
139
+ end
140
+
141
+ it 'retrieves the number revisions of the ruby files' do
142
+ Dir.stubs(:getwd).returns('/path/to/client')
143
+ RubyCritic::SourceControlSystem::Perforce.stubs(:`).once.returns(p4_stats)
144
+ @system.revisions_count('a_ruby_file.rb').must_equal 16
145
+ @system.revisions_count('second_ruby_file.rb').must_equal 12
146
+ end
147
+
148
+ it 'retrieves the date of the last commit of the ruby files' do
149
+ Dir.stubs(:getwd).returns('/path/to/client')
150
+ RubyCritic::SourceControlSystem::Perforce.stubs(:`).once.returns(p4_stats)
151
+ @system.date_of_last_commit('a_ruby_file.rb').must_equal '2016-09-05 11:39:11 +0000'
152
+ @system.date_of_last_commit('second_ruby_file.rb').must_equal '2016-05-30 09:47:48 +0000'
153
+ end
154
+
155
+ it 'retrieves the information if the ruby file is opened (in the changelist and ready to commit)' do
156
+ Dir.stubs(:getwd).returns('/path/to/client')
157
+ RubyCritic::SourceControlSystem::Perforce.stubs(:`).once.returns(p4_stats)
158
+ @system.revision?.must_equal true
159
+ end
160
+ end
161
+ end
162
+ 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.0.0
4
+ version: 3.1.0
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-01 00:00:00.000000000 Z
11
+ date: 2016-11-23 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.2
75
+ version: 2.3.1.4
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.2
82
+ version: 2.3.1.4
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: ruby_parser
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -253,6 +253,7 @@ files:
253
253
  - Gemfile
254
254
  - LICENSE.txt
255
255
  - README.md
256
+ - ROADMAP.md
256
257
  - Rakefile
257
258
  - bin/rubycritic
258
259
  - docs/building-own-code-climate.md
@@ -279,6 +280,7 @@ files:
279
280
  - lib/rubycritic/analysers/smells/flog.rb
280
281
  - lib/rubycritic/analysers/smells/reek.rb
281
282
  - lib/rubycritic/analysers_runner.rb
283
+ - lib/rubycritic/analysis_summary.rb
282
284
  - lib/rubycritic/browser.rb
283
285
  - lib/rubycritic/cli/application.rb
284
286
  - lib/rubycritic/cli/options.rb
@@ -297,15 +299,33 @@ files:
297
299
  - lib/rubycritic/core/rating.rb
298
300
  - lib/rubycritic/core/smell.rb
299
301
  - lib/rubycritic/generators/console_report.rb
302
+ - lib/rubycritic/generators/html/assets/fonts/FontAwesome.otf
303
+ - lib/rubycritic/generators/html/assets/fonts/Roboto-Medium.ttf
304
+ - lib/rubycritic/generators/html/assets/fonts/Roboto-Regular.ttf
305
+ - lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.eot
306
+ - lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.svg
307
+ - lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.ttf
308
+ - lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.woff
309
+ - lib/rubycritic/generators/html/assets/fonts/fontawesome-webfont.woff2
310
+ - lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.eot
311
+ - lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.svg
312
+ - lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.ttf
313
+ - lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.woff
314
+ - lib/rubycritic/generators/html/assets/fonts/glyphicons-halflings-regular.woff2
315
+ - lib/rubycritic/generators/html/assets/images/logo.png
300
316
  - lib/rubycritic/generators/html/assets/javascripts/application.js
317
+ - lib/rubycritic/generators/html/assets/javascripts/bootstrap.min.js
301
318
  - lib/rubycritic/generators/html/assets/javascripts/highcharts.src-4.0.1.js
302
- - lib/rubycritic/generators/html/assets/javascripts/jquery-2.1.0.js
303
- - lib/rubycritic/generators/html/assets/javascripts/jquery.floatThead-v1.2.7.js
304
- - lib/rubycritic/generators/html/assets/javascripts/jquery.scrollTo-1.4.11.js
319
+ - lib/rubycritic/generators/html/assets/javascripts/jquery.min.js
320
+ - lib/rubycritic/generators/html/assets/javascripts/jquery.scrollTo.min.js
305
321
  - lib/rubycritic/generators/html/assets/javascripts/jquery.tablesorter.js
306
- - lib/rubycritic/generators/html/assets/javascripts/jquery.timeago-v1.4.1.js
307
- - lib/rubycritic/generators/html/assets/javascripts/prettify-4-Mar-2013.js
322
+ - lib/rubycritic/generators/html/assets/javascripts/jquery.tablesorter.min.js
323
+ - lib/rubycritic/generators/html/assets/javascripts/jquery.timeago.js
324
+ - lib/rubycritic/generators/html/assets/javascripts/prettify.js
308
325
  - lib/rubycritic/generators/html/assets/stylesheets/application.css
326
+ - lib/rubycritic/generators/html/assets/stylesheets/bootstrap.min.css
327
+ - lib/rubycritic/generators/html/assets/stylesheets/font-awesome.min.css
328
+ - lib/rubycritic/generators/html/assets/stylesheets/prettify.css
309
329
  - lib/rubycritic/generators/html/assets/stylesheets/prettify.custom_theme.css
310
330
  - lib/rubycritic/generators/html/base.rb
311
331
  - lib/rubycritic/generators/html/code_file.rb
@@ -336,6 +356,7 @@ files:
336
356
  - lib/rubycritic/source_control_systems/double.rb
337
357
  - lib/rubycritic/source_control_systems/git.rb
338
358
  - lib/rubycritic/source_control_systems/mercurial.rb
359
+ - lib/rubycritic/source_control_systems/perforce.rb
339
360
  - lib/rubycritic/source_locator.rb
340
361
  - lib/rubycritic/version.rb
341
362
  - rubycritic.gemspec
@@ -347,6 +368,7 @@ files:
347
368
  - test/lib/rubycritic/analysers/smells/flay_test.rb
348
369
  - test/lib/rubycritic/analysers/smells/flog_test.rb
349
370
  - test/lib/rubycritic/analysers/smells/reek_test.rb
371
+ - test/lib/rubycritic/analysis_summary_test.rb
350
372
  - test/lib/rubycritic/browser_test.rb
351
373
  - test/lib/rubycritic/commands/status_reporter_test.rb
352
374
  - test/lib/rubycritic/configuration_test.rb
@@ -367,6 +389,7 @@ files:
367
389
  - test/lib/rubycritic/source_control_systems/interfaces/basic.rb
368
390
  - test/lib/rubycritic/source_control_systems/interfaces/time_travel.rb
369
391
  - test/lib/rubycritic/source_control_systems/mercurial_test.rb
392
+ - test/lib/rubycritic/source_control_systems/perforce_test.rb
370
393
  - test/lib/rubycritic/source_locator_test.rb
371
394
  - test/lib/rubycritic/version_test.rb
372
395
  - test/samples/empty.rb
@@ -419,6 +442,7 @@ test_files:
419
442
  - test/lib/rubycritic/analysers/smells/flay_test.rb
420
443
  - test/lib/rubycritic/analysers/smells/flog_test.rb
421
444
  - test/lib/rubycritic/analysers/smells/reek_test.rb
445
+ - test/lib/rubycritic/analysis_summary_test.rb
422
446
  - test/lib/rubycritic/browser_test.rb
423
447
  - test/lib/rubycritic/commands/status_reporter_test.rb
424
448
  - test/lib/rubycritic/configuration_test.rb
@@ -439,6 +463,7 @@ test_files:
439
463
  - test/lib/rubycritic/source_control_systems/interfaces/basic.rb
440
464
  - test/lib/rubycritic/source_control_systems/interfaces/time_travel.rb
441
465
  - test/lib/rubycritic/source_control_systems/mercurial_test.rb
466
+ - test/lib/rubycritic/source_control_systems/perforce_test.rb
442
467
  - test/lib/rubycritic/source_locator_test.rb
443
468
  - test/lib/rubycritic/version_test.rb
444
469
  - test/samples/empty.rb