rubycritic 3.0.0 → 3.1.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 (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