p8-metric_fu 0.8.4.16 → 0.8.9

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY CHANGED
@@ -1,3 +1,15 @@
1
+ === MetricFu 0.8.9 / 2009-1-20
2
+
3
+ * Thanks to Andre Arko and Petrik de Heus for adding the following features:
4
+ * The source control type is auto-detected for Churn
5
+ * Moved all presentation to templates
6
+ * Wrote specs for all classes
7
+ * Added flay, Reek and Roodi metrics
8
+ * There's now a configuration class (see README for details)
9
+ * Unification of metrics reports
10
+ * Metrics can be generated using one command
11
+ * Adding new metrics reports has been standardized
12
+
1
13
  === MetricFu 0.8.0 / 2008-10-06
2
14
 
3
15
  * Source Control Churn now supports git (thanks to Erik St Martin)
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008 Jake Scruggs
1
+ Copyright (c) 2008,2009 Jake Scruggs
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person
4
4
  obtaining a copy of this software and associated documentation
data/README CHANGED
@@ -1,4 +1,4 @@
1
- Version 0.8.0
1
+ Version 0.8.9
2
2
  http://github.com/jscruggs/metric_fu
3
3
 
4
4
  Metric_fu began its life as a plugin for Rails that generated code metrics reports. As of version 0.7.0, metric_fu is a gem owing to the excellent work done by Sean Soper.
@@ -12,7 +12,7 @@ Then in your Rakefile:
12
12
  require 'metric_fu'
13
13
 
14
14
  If you like to vendor gems, you can unpack metric_fu into vendor/gems and require it like so:
15
- require 'vendor/gems/jscruggs-metric_fu-0.8.0/lib/metric_fu'
15
+ require 'vendor/gems/jscruggs-metric_fu-0.8.9/lib/metric_fu'
16
16
 
17
17
  then you don't have to install it on every box you run it on.
18
18
 
@@ -144,4 +144,4 @@ You can also change the minimum churn count like so:
144
144
 
145
145
  ****Thanks****
146
146
 
147
- I'd like to thank the authors of Saikuro, Flog, Rcov, CruiseControl.rb, and Rails for creating such excellent open source products. Also Sean Soper, Michael Schubert, Kurtis Seebaldt, Toby Tripp, Paul Gross, and Chirdeep Shetty for their help and advice.
147
+ I'd like to thank the authors of Saikuro, Flog, Rcov, CruiseControl.rb, Flay, Reek, Roodi and Rails for creating such excellent open source products. Also Andre Arko, Petrik de Heus, Sean Soper, Erik St Martin, Andy Gregorowicz, Bastien, Michael Schubert, Kurtis Seebaldt, Toby Tripp, Paul Gross, and Chirdeep Shetty for their help and advice.
@@ -70,9 +70,9 @@ module MetricFu
70
70
  def link_to_filename(name, line = nil)
71
71
  filename = File.expand_path(name)
72
72
  if PLATFORM['darwin']
73
- %{<a href="txmt://open/?url=file://#{filename}&line=#{line}">#{name}</a>}
73
+ %{<a href="txmt://open/?url=file://#{filename}&line=#{line}">#{name}:#{line}</a>}
74
74
  else
75
- %{<a href="file://#{filename}">#{name}</a>}
75
+ %{<a href="file://#{filename}">#{name}:#{line}</a>}
76
76
  end
77
77
  end
78
78
 
@@ -45,15 +45,8 @@ module MetricFu
45
45
  SCORE_FORMAT = "%0.2f"
46
46
 
47
47
  class Base
48
- MODULE_NAME = "([A-Za-z]+)+"
49
- METHOD_NAME = "#([a-z0-9]+_?)+\\??\\!?"
50
- SCORE = "\\d+\\.\\d+"
51
-
52
- METHOD_NAME_RE = Regexp.new("#{MODULE_NAME}#{METHOD_NAME}")
53
- SCORE_RE = Regexp.new(SCORE)
54
-
55
- METHOD_LINE_RE = Regexp.new("#{MODULE_NAME}#{METHOD_NAME}:\\s\\(#{SCORE}\\)")
56
- OPERATOR_LINE_RE = Regexp.new("\\s+(#{SCORE}):\\s(.*)$")
48
+ METHOD_LINE_REGEX = /([A-Za-z]+#.*):\s\((\d+\.\d+)\)/
49
+ OPERATOR_LINE_REGEX = /\s+(\d+\.\d+):\s(.*)$/
57
50
 
58
51
  class << self
59
52
 
@@ -63,21 +56,18 @@ module MetricFu
63
56
  page = Page.new(score)
64
57
 
65
58
  text.each_line do |method_line|
66
- if METHOD_LINE_RE =~ method_line and
67
- method_name = method_line[METHOD_NAME_RE] and
68
- score = method_line[SCORE_RE]
69
- page.scanned_methods << ScannedMethod.new(method_name, score)
59
+ if match = method_line.match(METHOD_LINE_REGEX)
60
+ page.scanned_methods << ScannedMethod.new(match[1], match[2])
70
61
  end
71
-
72
- if OPERATOR_LINE_RE =~ method_line and
73
- operator = method_line[OPERATOR_LINE_RE, 2] and
74
- score = method_line[SCORE_RE]
75
- return if page.scanned_methods.empty?
76
- page.scanned_methods.last.operators << Operator.new(score, operator)
62
+
63
+ if match = method_line.match(OPERATOR_LINE_REGEX)
64
+ return if page.scanned_methods.empty?
65
+ page.scanned_methods.last.operators << Operator.new(match[1], match[2])
77
66
  end
78
67
  end
79
68
  page
80
69
  end
70
+
81
71
  end
82
72
  end
83
73
 
@@ -1,7 +1,7 @@
1
1
  namespace :metrics do
2
2
 
3
3
  RAILROAD_DIR = File.join(MetricFu::BASE_DIRECTORY, 'railroad')
4
- RAILROAD_INDEX = File.join(RAILROAD_DIR, 'index.html')
4
+ RAILROAD_FILE = File.join(RAILROAD_DIR, 'index.html')
5
5
 
6
6
  task :railroad => ['railroad:all'] do
7
7
  end
@@ -15,20 +15,23 @@ namespace :metrics do
15
15
 
16
16
  desc "Create a railroad models report"
17
17
  task :models do
18
- mkdir_p(RAILROAD_DIR) unless File.directory?(RAILROAD_DIR)
19
- `railroad -M -a -m -l -v | neato -Tpng > #{File.join(RAILROAD_DIR,'models.png')}`
18
+ #mkdir_p(RAILROAD_DIR) unless File.directory?(RAILROAD_DIR)
19
+ `railroad -M -a -m -l -v | neato -Tpng > #{File.join(MetricFu::BASE_DIRECTORY,'model-diagram.png')}`
20
+ #`echo "<a href=\"railroad/models.png\">Model diagram</a><br />" >> #{RAILROAD_FILE}`
20
21
  end
21
22
 
22
23
  desc "Create a railroad controllers report"
23
24
  task :controllers do
24
- mkdir_p(RAILROAD_DIR) unless File.directory?(RAILROAD_DIR)
25
- `railroad -C -l -v | neato -Tpng > #{File.join(RAILROAD_DIR,'controllers.png')}`
25
+ #mkdir_p(RAILROAD_DIR) unless File.directory?(RAILROAD_DIR)
26
+ `railroad -C -l -v | neato -Tpng > #{File.join(MetricFu::BASE_DIRECTORY,'controller-diagram.png')}`
27
+ #`echo "<a href=\"railroad/controllers.png\">Controller diagram</a><br />" >> #{RAILROAD_FILE}`
26
28
  end
27
29
 
28
30
  desc "Create a railroad acts_as_state_machine report"
29
31
  task :aasm do
30
- mkdir_p(RAILROAD_DIR) unless File.directory?(RAILROAD_DIR)
31
- `railroad -A -l -v | neato -Tpng > #{File.join(RAILROAD_DIR,'aasm.png')}`
32
+ #mkdir_p(RAILROAD_DIR) unless File.directory?(RAILROAD_DIR)
33
+ `railroad -A -l -v | neato -Tpng > #{File.join(MetricFu::BASE_DIRECTORY,'aasm-diagram.png')}`
34
+ #`echo "<a href=\"railroad/aasm.png\">State machine diagram</a><br />" >> #{RAILROAD_FILE}`
32
35
  end
33
36
 
34
37
  end
data/spec/flog_spec.rb CHANGED
@@ -45,6 +45,67 @@ BM
45
45
  1.1: entryRelationship
46
46
  IM
47
47
 
48
+ @assignment_method = <<-MTHD
49
+ Total Flog = 21.6 (5.4 +/- 3.3 flog / method)
50
+
51
+ ActivityReport#existing_measure_attributes=: (8.5)
52
+ 4.1: assignment
53
+ 1.8: id
54
+ 1.6: to_s
55
+ 1.4: []
56
+ 1.4: activity_report_measures
57
+ 1.2: each
58
+ 1.2: branch
59
+ MTHD
60
+
61
+ @class_methods_grouped_together = <<-MTHD
62
+ Total Flog = 61.8 (7.7 +/- 95.3 flog / method)
63
+
64
+ User#none: (32.8)
65
+ 7.2: include
66
+ 3.6: validates_length_of
67
+ 3.6: validates_format_of
68
+ 2.4: validates_presence_of
69
+ 2.4: validates_uniqueness_of
70
+ 1.4: bad_login_message
71
+ 1.4: name_regex
72
+ 1.4: bad_email_message
73
+ 1.4: bad_name_message
74
+ 1.4: login_regex
75
+ 1.4: email_regex
76
+ 1.2: private
77
+ 1.2: has_and_belongs_to_many
78
+ 1.2: before_create
79
+ 1.2: attr_accessible
80
+ 0.4: lit_fixnum
81
+ MTHD
82
+ end
83
+
84
+ it "should be able to parse class_methods_grouped_together" do
85
+ page = Base.parse(@class_methods_grouped_together)
86
+ page.should_not be_nil
87
+ page.score.should == 61.8
88
+ page.scanned_methods.size.should == 1
89
+ sm = page.scanned_methods.first
90
+ sm.name.should == 'User#none'
91
+ sm.score.should == 32.8
92
+
93
+ sm.operators.size.should == 16
94
+ sm.operators.first.score.should == 7.2
95
+ sm.operators.first.operator.should == "include"
96
+
97
+ sm.operators.last.score.should == 0.4
98
+ sm.operators.last.operator.should == "lit_fixnum"
99
+ end
100
+
101
+ it "should be able to parse an assignment method" do
102
+ page = Base.parse(@assignment_method)
103
+ page.should_not be_nil
104
+ page.score.should == 21.6
105
+ page.scanned_methods.size.should == 1
106
+ sm = page.scanned_methods.first
107
+ sm.name.should == 'ActivityReport#existing_measure_attributes='
108
+ sm.score.should == 8.5
48
109
  end
49
110
 
50
111
  it "should be able to parse an alpha only method" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: p8-metric_fu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4.16
4
+ version: 0.8.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jake Scruggs
@@ -69,7 +69,7 @@ dependencies:
69
69
  - !ruby/object:Gem::Version
70
70
  version: 0.0.0
71
71
  version:
72
- description: Code metrics from Flog, Flay, RCov, Saikuro, Churn, and Rails' stats task
72
+ description: Code metrics from Flog, Flay, RCov, Saikuro, Churn, Reek, Roodi and Rails' stats task
73
73
  email: jake.scruggs@gmail.com
74
74
  executables: []
75
75