metric_fu 4.4.1 → 4.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +14 -6
  2. data/CONTRIBUTORS +1 -0
  3. data/Gemfile +1 -1
  4. data/HISTORY.md +13 -0
  5. data/checksum/metric_fu-4.4.1.gem.sha512 +1 -0
  6. data/lib/metric_fu/cli/parser.rb +7 -0
  7. data/lib/metric_fu/data_structures/line_numbers.rb +70 -59
  8. data/lib/metric_fu/data_structures/location.rb +36 -20
  9. data/lib/metric_fu/data_structures/sexp_node.rb +89 -0
  10. data/lib/metric_fu/environment.rb +48 -0
  11. data/lib/metric_fu/io.rb +1 -7
  12. data/lib/metric_fu/metrics/base_template.rb +28 -9
  13. data/lib/metric_fu/metrics/hotspots/analysis/analyzed_problems.rb +8 -44
  14. data/lib/metric_fu/metrics/hotspots/analysis/analyzer_tables.rb +3 -0
  15. data/lib/metric_fu/metrics/hotspots/analysis/problems.rb +6 -2
  16. data/lib/metric_fu/metrics/hotspots/analysis/ranked_problem_location.rb +71 -0
  17. data/lib/metric_fu/metrics/hotspots/analysis/rankings.rb +8 -1
  18. data/lib/metric_fu/metrics/hotspots/hotspot_analyzer.rb +0 -1
  19. data/lib/metric_fu/metrics/hotspots/hotspots.rb +8 -3
  20. data/lib/metric_fu/metrics/hotspots/template_awesome/hotspots.html.erb +12 -12
  21. data/lib/metric_fu/metrics/saikuro/init.rb +3 -0
  22. data/lib/metric_fu/metrics/saikuro/parsing_element.rb +39 -0
  23. data/lib/metric_fu/metrics/saikuro/saikuro.rb +4 -145
  24. data/lib/metric_fu/metrics/saikuro/scratch_file.rb +114 -0
  25. data/lib/metric_fu/version.rb +1 -1
  26. data/spec/metric_fu/configuration_spec.rb +0 -7
  27. data/spec/metric_fu/formatter/html_spec.rb +0 -1
  28. data/spec/metric_fu/formatter/yaml_spec.rb +0 -1
  29. data/spec/metric_fu/metrics/base_template_spec.rb +1 -2
  30. data/spec/metric_fu/metrics/hotspots/analysis/analyzed_problems_spec.rb +8 -16
  31. data/spec/metric_fu/metrics/hotspots/hotspots_spec.rb +26 -69
  32. data/spec/metric_fu/metrics/saikuro/saikuro_spec.rb +5 -5
  33. data/spec/metric_fu/reporting/graphs/engines/gchart_spec.rb +1 -0
  34. data/spec/resources/yml/hotspots/generator.yml +47 -0
  35. data/spec/resources/yml/hotspots/generator_analysis.yml +53 -0
  36. data/spec/run_spec.rb +0 -1
  37. data/spec/support/helper_methods.rb +10 -0
  38. data/spec/support/suite.rb +13 -14
  39. metadata +35 -25
@@ -1,10 +1,10 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Saikuro do
3
+ describe MetricFu::SaikuroGenerator do
4
4
  describe "to_h method" do
5
5
  before :all do
6
6
  options = {}
7
- saikuro = MetricFu::Saikuro.new(options)
7
+ saikuro = MetricFu::SaikuroGenerator.new(options)
8
8
  def saikuro.metric_directory
9
9
  "#{resources_path}/saikuro"
10
10
  end
@@ -38,7 +38,7 @@ describe Saikuro do
38
38
  describe "per_file_info method" do
39
39
  before :all do
40
40
  options = {}
41
- @saikuro = MetricFu::Saikuro.new(options)
41
+ @saikuro = MetricFu::SaikuroGenerator.new(options)
42
42
  def @saikuro.metric_directory
43
43
  "#{resources_path}/saikuro"
44
44
  end
@@ -52,11 +52,11 @@ describe Saikuro do
52
52
  end
53
53
  end
54
54
 
55
- describe Saikuro::SFile do
55
+ describe MetricFu::SaikuroScratchFile do
56
56
  describe "getting elements from a Saikuro result file" do
57
57
  it "should parse nested START/END sections" do
58
58
  path = "#{resources_path}/saikuro_sfiles/thing.rb_cyclo.html"
59
- sfile = Saikuro::SFile.new path
59
+ sfile = MetricFu::SaikuroScratchFile.new path
60
60
  sfile.elements.map { |e| e.complexity }.sort.should eql(["0","0","2"])
61
61
  end
62
62
  end
@@ -1,4 +1,5 @@
1
1
  require "spec_helper"
2
+ require 'googlecharts'
2
3
 
3
4
  describe MetricFu::Grapher do
4
5
  describe "require_graphing_gem" do
@@ -0,0 +1,47 @@
1
+ ---
2
+ :reek:
3
+ :matches:
4
+ - :file_path: lib/client/client.rb:42
5
+ :code_smells:
6
+ - :type: Large Class
7
+ :message: has at least 27 methods
8
+ :method: Devver::Client
9
+ - :type: Long Method
10
+ :message: has approx 6 statements
11
+ :method: Devver::Client#client_requested_sync
12
+ :flog:
13
+ :method_containers:
14
+ - :highest_score: 61.5870319141946
15
+ :path: /lib/client/client.rb
16
+ :methods:
17
+ Client#client_requested_sync:
18
+ :path: /lib/client/client.rb:42
19
+ :score: 37.9270319141946
20
+ :operators:
21
+ :+: 1.70000000000001
22
+ :/: 1.80000000000001
23
+ :method_at_line: 1.90000000000001
24
+ :puts: 1.70000000000001
25
+ :assignment: 33.0000000000001
26
+ :in_method?: 1.70000000000001
27
+ :message: 1.70000000000001
28
+ :branch: 12.6
29
+ :<<: 3.40000000000001
30
+ :each: 1.50000000000001
31
+ :lit_fixnum: 1.45
32
+ :raise: 1.80000000000001
33
+ :each_pair: 1.3
34
+ :*: 1.60000000000001
35
+ :to_f: 2.00000000000001
36
+ :each_with_index: 3.00000000000001
37
+ :[]: 22.3000000000001
38
+ :new: 1.60000000000001
39
+ :average_score: 11.1209009055421
40
+ :total_score: 1817.6
41
+ :name: Client#client_requested_sync
42
+ :churn:
43
+ :changes:
44
+ - :file_path: lib/client/client.rb
45
+ :times_changed: 54
46
+ - :file_path: lib/client/foo.rb
47
+ :times_changed: 52
@@ -0,0 +1,53 @@
1
+ ---
2
+ files:
3
+ - location:
4
+ class_name:
5
+ method_name:
6
+ file_path: lib/client/client.rb:42
7
+ file_name: lib/client/client.rb
8
+ line_number: '42'
9
+ hash_key: '["lib/client/client.rb:42", nil, nil]'
10
+ details:
11
+ flog: complexity is 37.9
12
+ reek: found 2 code smells
13
+ - location:
14
+ class_name:
15
+ method_name:
16
+ file_path: lib/client/client.rb
17
+ file_name: lib/client/client.rb
18
+ line_number:
19
+ hash_key: '["lib/client/client.rb", nil, nil]'
20
+ details:
21
+ churn: detected high level of churn (changed 54 times)
22
+ - location:
23
+ class_name:
24
+ method_name:
25
+ file_path: lib/client/foo.rb
26
+ file_name: lib/client/foo.rb
27
+ line_number:
28
+ hash_key: '["lib/client/foo.rb", nil, nil]'
29
+ details:
30
+ churn: detected high level of churn (changed 52 times)
31
+ classes:
32
+ - location:
33
+ class_name: Client
34
+ method_name:
35
+ file_path: lib/client/client.rb:42
36
+ file_name: lib/client/client.rb
37
+ line_number: '42'
38
+ hash_key: '["lib/client/client.rb:42", "Client", nil]'
39
+ details:
40
+ flog: complexity is 37.9
41
+ reek: found 2 code smells
42
+ methods:
43
+ - location:
44
+ class_name: Client
45
+ method_name: Client#client_requested_sync
46
+ file_path: lib/client/client.rb:42
47
+ file_name: lib/client/client.rb
48
+ line_number: '42'
49
+ hash_key: '["lib/client/client.rb:42", "Client", "Client#client_requested_sync"]'
50
+ simple_method_name: '#client_requested_sync'
51
+ details:
52
+ flog: complexity is 37.9
53
+ reek: found 1 code smells
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'fakefs/safe'
3
2
  require 'metric_fu/cli/client'
4
3
 
5
4
  describe MetricFu do
@@ -16,7 +16,17 @@ end
16
16
  def read_resource(path_in_resources)
17
17
  File.read("#{resources_path}/#{path_in_resources}")
18
18
  end
19
+
19
20
  def metric_data(path_in_resources)
20
21
  metric_path = read_resource("yml/#{path_in_resources}")
21
22
  YAML.load( metric_path )
22
23
  end
24
+
25
+ def resources_path
26
+ "#{MetricFu.root_dir}/spec/resources"
27
+ # directory(name)
28
+ end
29
+
30
+ def compare_paths(path1, path2)
31
+ File.join(MetricFu.root_dir, path1).should == File.join(MetricFu.root_dir, path2)
32
+ end
@@ -1,9 +1,7 @@
1
-
2
- def compare_paths(path1, path2)
3
- File.join(MetricFu.root_dir, path1).should == File.join(MetricFu.root_dir, path2)
1
+ def directory(name)
2
+ MetricFu::Io::FileSystem.directory(name)
4
3
  end
5
4
 
6
-
7
5
  # TODO these directories shouldn't be written in the first place
8
6
  def cleanup_test_files
9
7
  FileUtils.rm_rf(Dir["#{MetricFu.root_dir}/foo"])
@@ -12,17 +10,18 @@ rescue => e
12
10
  mf_debug "Failed cleaning up test files #{e.inspect}"
13
11
  end
14
12
 
15
-
16
- def resources_path
17
- "#{MetricFu.root_dir}/spec/resources"
18
- end
19
-
20
- def directory(name)
21
- MetricFu::Io::FileSystem.directory(name)
13
+ # fakefs doesn't seem to work reliably on non-mri rubies
14
+ def using_fake_filesystem
15
+ return false unless MetricFu.configuration.mri?
16
+ require 'fakefs/safe'
17
+ true
18
+ rescue NameError, LoadError
19
+ warn "Fake filesystem not available"
20
+ false
22
21
  end
23
22
 
24
23
  def setup_fs
25
- if !MetricFu.configuration.rubinius? # fakefs doesn't seem to work on rubinius...
24
+ if using_fake_filesystem
26
25
  FakeFS.activate!
27
26
  FakeFS::FileSystem.clone('lib')
28
27
  FakeFS::FileSystem.clone('.metrics')
@@ -41,11 +40,11 @@ def setup_fs
41
40
  end
42
41
 
43
42
  def cleanup_fs
44
- if !MetricFu.configuration.rubinius?
43
+ if using_fake_filesystem
45
44
  FakeFS::FileSystem.clear
46
45
  FakeFS.deactivate!
47
46
  else
48
- # Not ideal, but workaround for rubinius...
47
+ # Not ideal, but workaround for non-mri rubies
49
48
  FileUtils.rm_rf("#{directory('base_directory')}/report.yml")
50
49
  FileUtils.rm_rf(Dir.glob("#{directory('output_directory')}/*.html"))
51
50
  FileUtils.rm_rf(Dir.glob("#{directory('output_directory')}/*.js"))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metric_fu
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.1
4
+ version: 4.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jake Scruggs
@@ -19,13 +19,13 @@ authors:
19
19
  autorequire:
20
20
  bindir: bin
21
21
  cert_chain: []
22
- date: 2013-08-30 00:00:00.000000000 Z
22
+ date: 2013-09-25 00:00:00.000000000 Z
23
23
  dependencies:
24
24
  - !ruby/object:Gem::Dependency
25
25
  name: flay
26
26
  requirement: !ruby/object:Gem::Requirement
27
27
  requirements:
28
- - - '>='
28
+ - - ! '>='
29
29
  - !ruby/object:Gem::Version
30
30
  version: 2.0.1
31
31
  - - ~>
@@ -35,7 +35,7 @@ dependencies:
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ! '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.0.1
41
41
  - - ~>
@@ -59,7 +59,7 @@ dependencies:
59
59
  name: flog
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
- - - '>='
62
+ - - ! '>='
63
63
  - !ruby/object:Gem::Version
64
64
  version: 4.1.1
65
65
  - - ~>
@@ -69,7 +69,7 @@ dependencies:
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - '>='
72
+ - - ! '>='
73
73
  - !ruby/object:Gem::Version
74
74
  version: 4.1.1
75
75
  - - ~>
@@ -79,7 +79,7 @@ dependencies:
79
79
  name: reek
80
80
  requirement: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - '>='
82
+ - - ! '>='
83
83
  - !ruby/object:Gem::Version
84
84
  version: 1.3.3
85
85
  - - ~>
@@ -89,7 +89,7 @@ dependencies:
89
89
  prerelease: false
90
90
  version_requirements: !ruby/object:Gem::Requirement
91
91
  requirements:
92
- - - '>='
92
+ - - ! '>='
93
93
  - !ruby/object:Gem::Version
94
94
  version: 1.3.3
95
95
  - - ~>
@@ -99,7 +99,7 @@ dependencies:
99
99
  name: cane
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - '>='
102
+ - - ! '>='
103
103
  - !ruby/object:Gem::Version
104
104
  version: 2.5.2
105
105
  - - ~>
@@ -109,7 +109,7 @@ dependencies:
109
109
  prerelease: false
110
110
  version_requirements: !ruby/object:Gem::Requirement
111
111
  requirements:
112
- - - '>='
112
+ - - ! '>='
113
113
  - !ruby/object:Gem::Version
114
114
  version: 2.5.2
115
115
  - - ~>
@@ -119,7 +119,7 @@ dependencies:
119
119
  name: rails_best_practices
120
120
  requirement: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '>='
122
+ - - ! '>='
123
123
  - !ruby/object:Gem::Version
124
124
  version: 1.14.3
125
125
  - - ~>
@@ -129,7 +129,7 @@ dependencies:
129
129
  prerelease: false
130
130
  version_requirements: !ruby/object:Gem::Requirement
131
131
  requirements:
132
- - - '>='
132
+ - - ! '>='
133
133
  - !ruby/object:Gem::Version
134
134
  version: 1.14.3
135
135
  - - ~>
@@ -139,14 +139,14 @@ dependencies:
139
139
  name: metric_fu-Saikuro
140
140
  requirement: !ruby/object:Gem::Requirement
141
141
  requirements:
142
- - - '>='
142
+ - - ! '>='
143
143
  - !ruby/object:Gem::Version
144
144
  version: 1.1.1.0
145
145
  type: :runtime
146
146
  prerelease: false
147
147
  version_requirements: !ruby/object:Gem::Requirement
148
148
  requirements:
149
- - - '>='
149
+ - - ! '>='
150
150
  - !ruby/object:Gem::Version
151
151
  version: 1.1.1.0
152
152
  - !ruby/object:Gem::Dependency
@@ -181,56 +181,56 @@ dependencies:
181
181
  name: redcard
182
182
  requirement: !ruby/object:Gem::Requirement
183
183
  requirements:
184
- - - '>='
184
+ - - ! '>='
185
185
  - !ruby/object:Gem::Version
186
186
  version: '0'
187
187
  type: :runtime
188
188
  prerelease: false
189
189
  version_requirements: !ruby/object:Gem::Requirement
190
190
  requirements:
191
- - - '>='
191
+ - - ! '>='
192
192
  - !ruby/object:Gem::Version
193
193
  version: '0'
194
194
  - !ruby/object:Gem::Dependency
195
195
  name: coderay
196
196
  requirement: !ruby/object:Gem::Requirement
197
197
  requirements:
198
- - - '>='
198
+ - - ! '>='
199
199
  - !ruby/object:Gem::Version
200
200
  version: '0'
201
201
  type: :runtime
202
202
  prerelease: false
203
203
  version_requirements: !ruby/object:Gem::Requirement
204
204
  requirements:
205
- - - '>='
205
+ - - ! '>='
206
206
  - !ruby/object:Gem::Version
207
207
  version: '0'
208
208
  - !ruby/object:Gem::Dependency
209
209
  name: bluff
210
210
  requirement: !ruby/object:Gem::Requirement
211
211
  requirements:
212
- - - '>='
212
+ - - ! '>='
213
213
  - !ruby/object:Gem::Version
214
214
  version: '0'
215
215
  type: :runtime
216
216
  prerelease: false
217
217
  version_requirements: !ruby/object:Gem::Requirement
218
218
  requirements:
219
- - - '>='
219
+ - - ! '>='
220
220
  - !ruby/object:Gem::Version
221
221
  version: '0'
222
222
  - !ruby/object:Gem::Dependency
223
223
  name: multi_json
224
224
  requirement: !ruby/object:Gem::Requirement
225
225
  requirements:
226
- - - '>='
226
+ - - ! '>='
227
227
  - !ruby/object:Gem::Version
228
228
  version: '0'
229
229
  type: :runtime
230
230
  prerelease: false
231
231
  version_requirements: !ruby/object:Gem::Requirement
232
232
  requirements:
233
- - - '>='
233
+ - - ! '>='
234
234
  - !ruby/object:Gem::Version
235
235
  version: '0'
236
236
  description: Code metrics from Flog, Flay, Saikuro, Churn, Reek, Roodi, Code Statistics,
@@ -258,6 +258,7 @@ files:
258
258
  - .yardopts
259
259
  - AUTHORS
260
260
  - CONTRIBUTING.md
261
+ - CONTRIBUTORS
261
262
  - Gemfile
262
263
  - HISTORY.md
263
264
  - MIT-LICENSE
@@ -277,6 +278,7 @@ files:
277
278
  - checksum/metric_fu-4.3.0.gem.sha512
278
279
  - checksum/metric_fu-4.3.1.gem.sha512
279
280
  - checksum/metric_fu-4.4.0.gem.sha512
281
+ - checksum/metric_fu-4.4.1.gem.sha512
280
282
  - config/roodi_config.yml
281
283
  - gem_tasks/build.rake
282
284
  - gemfiles/Gemfile.travis
@@ -288,6 +290,7 @@ files:
288
290
  - lib/metric_fu/constantize.rb
289
291
  - lib/metric_fu/data_structures/line_numbers.rb
290
292
  - lib/metric_fu/data_structures/location.rb
293
+ - lib/metric_fu/data_structures/sexp_node.rb
291
294
  - lib/metric_fu/environment.rb
292
295
  - lib/metric_fu/errors/analysis_error.rb
293
296
  - lib/metric_fu/formatter.rb
@@ -332,6 +335,7 @@ files:
332
335
  - lib/metric_fu/metrics/hotspots/analysis/grouping.rb
333
336
  - lib/metric_fu/metrics/hotspots/analysis/groupings.rb
334
337
  - lib/metric_fu/metrics/hotspots/analysis/problems.rb
338
+ - lib/metric_fu/metrics/hotspots/analysis/ranked_problem_location.rb
335
339
  - lib/metric_fu/metrics/hotspots/analysis/ranking.rb
336
340
  - lib/metric_fu/metrics/hotspots/analysis/rankings.rb
337
341
  - lib/metric_fu/metrics/hotspots/analysis/record.rb
@@ -370,8 +374,10 @@ files:
370
374
  - lib/metric_fu/metrics/roodi/roodi_hotspot.rb
371
375
  - lib/metric_fu/metrics/roodi/template_awesome/roodi.html.erb
372
376
  - lib/metric_fu/metrics/saikuro/init.rb
377
+ - lib/metric_fu/metrics/saikuro/parsing_element.rb
373
378
  - lib/metric_fu/metrics/saikuro/saikuro.rb
374
379
  - lib/metric_fu/metrics/saikuro/saikuro_hotspot.rb
380
+ - lib/metric_fu/metrics/saikuro/scratch_file.rb
375
381
  - lib/metric_fu/metrics/saikuro/template_awesome/saikuro.html.erb
376
382
  - lib/metric_fu/metrics/stats/init.rb
377
383
  - lib/metric_fu/metrics/stats/stats.rb
@@ -455,6 +461,8 @@ files:
455
461
  - spec/resources/saikuro_sfiles/thing.rb_cyclo.html
456
462
  - spec/resources/yml/20090630.yml
457
463
  - spec/resources/yml/hotspots/flog.yml
464
+ - spec/resources/yml/hotspots/generator.yml
465
+ - spec/resources/yml/hotspots/generator_analysis.yml
458
466
  - spec/resources/yml/hotspots/reek.yml
459
467
  - spec/resources/yml/hotspots/roodi.yml
460
468
  - spec/resources/yml/hotspots/saikuro.yml
@@ -480,17 +488,17 @@ require_paths:
480
488
  - lib
481
489
  required_ruby_version: !ruby/object:Gem::Requirement
482
490
  requirements:
483
- - - '>='
491
+ - - ! '>='
484
492
  - !ruby/object:Gem::Version
485
493
  version: 1.9.0
486
494
  required_rubygems_version: !ruby/object:Gem::Requirement
487
495
  requirements:
488
- - - '>='
496
+ - - ! '>='
489
497
  - !ruby/object:Gem::Version
490
498
  version: 1.3.6
491
499
  requirements: []
492
500
  rubyforge_project: metric_fu
493
- rubygems_version: 2.0.3
501
+ rubygems_version: 2.0.8
494
502
  signing_key:
495
503
  specification_version: 4
496
504
  summary: A fistful of code metrics, with awesome templates and graphs
@@ -545,6 +553,8 @@ test_files:
545
553
  - spec/resources/saikuro_sfiles/thing.rb_cyclo.html
546
554
  - spec/resources/yml/20090630.yml
547
555
  - spec/resources/yml/hotspots/flog.yml
556
+ - spec/resources/yml/hotspots/generator.yml
557
+ - spec/resources/yml/hotspots/generator_analysis.yml
548
558
  - spec/resources/yml/hotspots/reek.yml
549
559
  - spec/resources/yml/hotspots/roodi.yml
550
560
  - spec/resources/yml/hotspots/saikuro.yml