metric_fu 4.4.1 → 4.4.2

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 (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