factorylabs-metric_fu 0.8.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/lib/metric_fu.rb ADDED
@@ -0,0 +1,7 @@
1
+ module MetricFu
2
+ BASE_DIRECTORY = ENV['CC_BUILD_ARTIFACTS'] || 'tmp/metric_fu'
3
+ end
4
+
5
+ require File.join(File.dirname(__FILE__), 'metric_fu', 'md5_tracker')
6
+ require File.join(File.dirname(__FILE__), 'metric_fu', 'flog_reporter')
7
+ require File.join(File.dirname(__FILE__), 'tasks', 'metric_fu')
@@ -0,0 +1,11 @@
1
+ require File.join(File.dirname(__FILE__), '../metric_fu/churn')
2
+
3
+ namespace :metrics do
4
+
5
+ desc "Which files change the most"
6
+ task :churn do
7
+ churn_dir = File.join(MetricFu::BASE_DIRECTORY, 'churn')
8
+ MetricFu::Churn.generate_report(churn_dir, defined?(MetricFu::CHURN_OPTIONS) ? MetricFu::CHURN_OPTIONS : {} )
9
+ system("open #{churn_dir}/index.html") if PLATFORM['darwin']
10
+ end
11
+ end
@@ -0,0 +1,40 @@
1
+ require 'fileutils'
2
+
3
+ begin
4
+ require 'rcov'
5
+ require 'rcov/rcovtask'
6
+
7
+ namespace :metrics do
8
+
9
+ COVERAGE_DIR = File.join(MetricFu::BASE_DIRECTORY, 'coverage')
10
+ COVERAGE_DATA_FILE = File.join(MetricFu::BASE_DIRECTORY, 'coverage.data')
11
+
12
+ namespace :coverage do
13
+ rcov_output = COVERAGE_DIR
14
+
15
+ desc "Delete aggregate coverage data."
16
+ task(:clean) { rm_f("rcov_tmp", :verbose => false) }
17
+
18
+ desc "RCov task to generate report"
19
+ Rcov::RcovTask.new(:do => :clean) do |t|
20
+ FileUtils.mkdir_p(MetricFu::BASE_DIRECTORY) unless File.directory?(MetricFu::BASE_DIRECTORY)
21
+ t.test_files = FileList['test/**/*_test.rb', 'spec/**/*_spec.rb']
22
+ t.rcov_opts = ["--sort coverage", "--html", "--rails", "--exclude /gems/,/Library/"]
23
+ t.output_dir = COVERAGE_DIR
24
+ # this line is a fix for Rails 2.1 relative loading issues
25
+ t.libs << 'test'
26
+ end
27
+ end
28
+
29
+ desc "Generate and open coverage report"
30
+ task :coverage => ['coverage:do'] do
31
+ system("open #{COVERAGE_DIR}/index.html") if PLATFORM['darwin']
32
+ end
33
+ end
34
+ rescue LoadError
35
+ if RUBY_PLATFORM =~ /java/
36
+ puts 'running in jruby - rcov tasks not available'
37
+ else
38
+ puts 'sudo gem install rcov # if you want the rcov tasks'
39
+ end
40
+ end
@@ -0,0 +1,14 @@
1
+ namespace :metrics do
2
+
3
+ FLAY_DIR = File.join(MetricFu::BASE_DIRECTORY, 'flay')
4
+ FLAY_FILE = File.join(FLAY_DIR, 'index.html')
5
+
6
+ desc "A code duplication report using flay"
7
+ task :flay do
8
+ mkdir_p(FLAY_DIR) unless File.directory?(FLAY_DIR)
9
+ `echo '<pre>' > #{FLAY_FILE}`
10
+ `flay #{RAILS_ROOT}/test/**/*.rb #{RAILS_ROOT}/app/**/*.rb >> #{FLAY_FILE}`
11
+ `echo '</pre>' >> #{FLAY_FILE}`
12
+ system("open #{FLAY_FILE}") if PLATFORM['darwin']
13
+ end
14
+ end
@@ -0,0 +1,62 @@
1
+ begin
2
+ FLOG_DIR = File.join(MetricFu::BASE_DIRECTORY, 'flog')
3
+
4
+ def flog(output, directory)
5
+ Dir.glob("#{directory}/**/*.rb").each do |filename|
6
+ output_dir = "#{FLOG_DIR}/#{filename.split("/")[0..-2].join("/")}"
7
+ mkdir_p(output_dir, :verbose => false) unless File.directory?(output_dir)
8
+ `flog #{filename} > #{FLOG_DIR}/#{filename.split('.')[0]}.txt` if MetricFu::MD5Tracker.file_changed?(filename, FLOG_DIR)
9
+ end
10
+ end
11
+
12
+ namespace :metrics do
13
+
14
+ task :flog => ['flog:all'] do
15
+ end
16
+
17
+ namespace :flog do
18
+ desc "Delete aggregate flog data."
19
+ task(:clean) { rm_rf(FLOG_DIR, :verbose => false) }
20
+
21
+ desc "Flog code in app/models"
22
+ task :models do
23
+ flog "models", "app/models"
24
+ end
25
+
26
+ desc "Flog code in app/controllers"
27
+ task :controllers do
28
+ flog "controllers", "app/controllers"
29
+ end
30
+
31
+ desc "Flog code in app/helpers"
32
+ task :helpers do
33
+ flog "helpers", "app/helpers"
34
+ end
35
+
36
+ desc "Flog code in lib"
37
+ task :lib do
38
+ flog "lib", "lib"
39
+ end
40
+
41
+ desc "Generate and open flog report"
42
+ task :all => [:models, :controllers, :helpers, :lib] do
43
+ MetricFu::FlogReporter::Generator.generate_report(FLOG_DIR)
44
+ system("open #{FLOG_DIR}/index.html") if PLATFORM['darwin']
45
+ end
46
+
47
+ desc "Generate a flog report from specified directories"
48
+ task :custom do
49
+ raise "You must define MetricFu::DIRECTORIES_TO_FLOG in your Rakefile" unless defined?(MetricFu::DIRECTORIES_TO_FLOG)
50
+ MetricFu::DIRECTORIES_TO_FLOG.each { |directory| flog(directory, directory) }
51
+ MetricFu::FlogReporter::Generator.generate_report(FLOG_DIR)
52
+ end
53
+ end
54
+
55
+ end
56
+ rescue LoadError
57
+ if RUBY_PLATFORM =~ /java/
58
+ puts 'running in jruby - flog tasks not available'
59
+ else
60
+ puts 'sudo gem install flog # if you want the flog tasks'
61
+ end
62
+ end
@@ -0,0 +1,11 @@
1
+ namespace :metrics do
2
+ task :prepare do
3
+ RAILS_ENV = 'test'
4
+ end
5
+
6
+ desc "Useful for continuous integration"
7
+ task :all_with_migrate => [:prepare, "db:migrate", :all]
8
+
9
+ desc "Generate coverage, cyclomatic complexity (saikuro), flog, stats, and churn reports"
10
+ task :all => [:coverage, :saikuro, :flog, :churn, :stats, :railroad, :reek, :roodi, :flay]
11
+ end
@@ -0,0 +1,6 @@
1
+ require 'fileutils'
2
+ require 'rubygems'
3
+ require 'rake'
4
+
5
+ # Load rake files
6
+ Dir["#{File.dirname(__FILE__)}/*.rake"].each { |ext| load ext }
@@ -0,0 +1,36 @@
1
+ namespace :metrics do
2
+
3
+ RAILROAD_DIR = File.join(MetricFu::BASE_DIRECTORY, 'railroad')
4
+ RAILROAD_INDEX = File.join(RAILROAD_DIR, 'index.html')
5
+
6
+ task :railroad => ['railroad:all'] do
7
+ end
8
+
9
+ namespace :railroad do
10
+
11
+ desc "Create all railroad reports"
12
+ task :all => [:models, :controllers, :aasm] do
13
+ #system("open #{RAILROAD_INDEX}") if PLATFORM['darwin']
14
+ end
15
+
16
+ desc "Create a railroad models report"
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')}`
20
+ end
21
+
22
+ desc "Create a railroad controllers report"
23
+ 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')}`
26
+ end
27
+
28
+ desc "Create a railroad acts_as_state_machine report"
29
+ 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
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,14 @@
1
+ namespace :metrics do
2
+
3
+ REEK_DIR = File.join(MetricFu::BASE_DIRECTORY, 'reek')
4
+ REEK_FILE = File.join(REEK_DIR, 'index.html')
5
+
6
+ desc "A code smell report using Reek"
7
+ task :reek do
8
+ mkdir_p(REEK_DIR) unless File.directory?(REEK_DIR)
9
+ `echo '<pre>' > #{REEK_FILE}`
10
+ `reek #{RAILS_ROOT}/test/**/*.rb #{RAILS_ROOT}/app/**/*.rb >> #{REEK_FILE}`
11
+ `echo '</pre>' >> #{REEK_FILE}`
12
+ system("open #{REEK_FILE}") if PLATFORM['darwin']
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ namespace :metrics do
2
+
3
+ ROODI_DIR = File.join(MetricFu::BASE_DIRECTORY, 'roodi')
4
+ ROODI_FILE = File.join(ROODI_DIR, 'index.html')
5
+
6
+ desc "A Ruby coding standards report using Roodi"
7
+ task :roodi do
8
+ mkdir_p(ROODI_DIR) unless File.directory?(ROODI_DIR)
9
+ `echo '<pre>' > #{ROODI_FILE}`
10
+ `roodi #{RAILS_ROOT}/lib/**/*.rb #{RAILS_ROOT}/app/**/*.rb >> #{ROODI_FILE}`
11
+ `echo '</pre>' >> #{ROODI_FILE}`
12
+ system("open #{ROODI_FILE}") if PLATFORM['darwin']
13
+ end
14
+ end
@@ -0,0 +1,34 @@
1
+ namespace :metrics do
2
+
3
+ SAIKURO_DIR = File.join(MetricFu::BASE_DIRECTORY, 'saikuro')
4
+
5
+ desc "A cyclomatic complexity report using Saikuro"
6
+ task :saikuro do
7
+ raise "SAIKURO_OPTIONS is now MetricFu::SAIKURO_OPTIONS" if defined?(SAIKURO_OPTIONS)
8
+ default_options = {"--output_directory" => SAIKURO_DIR,
9
+ "--input_directory" => "app",
10
+ "--cyclo" => "",
11
+ "--filter_cyclo" => "0",
12
+ "--warn_cyclo" => "5",
13
+ "--error_cyclo" => "7"}
14
+
15
+ default_options.merge!(MetricFu::SAIKURO_OPTIONS) if defined?(MetricFu::SAIKURO_OPTIONS)
16
+ options = ""
17
+ default_options.each_pair { |key, value| options << "#{key} #{value} " }
18
+
19
+ sh "ruby \"#{File.expand_path(File.join(File.dirname(__FILE__), '..', 'metric_fu', 'saikuro'))}/saikuro.rb\" " +
20
+ "#{options}" do |ok, response|
21
+ unless ok
22
+ puts "Saikuro failed with exit status: #{response.exitstatus}"
23
+ exit 1
24
+ end
25
+ end
26
+
27
+ if File.exist? "#{SAIKURO_DIR}/index_cyclo.html"
28
+ mv "#{SAIKURO_DIR}/index_cyclo.html",
29
+ "#{SAIKURO_DIR}/index.html"
30
+ end
31
+
32
+ system("open #{SAIKURO_DIR}/index.html") if PLATFORM['darwin']
33
+ end
34
+ end
@@ -0,0 +1,14 @@
1
+ namespace :metrics do
2
+
3
+ STATS_DIR = File.join(MetricFu::BASE_DIRECTORY, 'stats')
4
+ STATS_FILE = File.join(STATS_DIR, 'index.html')
5
+
6
+ desc "A stats report"
7
+ task :stats do
8
+ mkdir_p(STATS_DIR) unless File.directory?(STATS_DIR)
9
+ `echo '<pre>' > #{STATS_FILE}`
10
+ `rake stats >> #{STATS_FILE}`
11
+ `echo '</pre>' >> #{STATS_FILE}`
12
+ system("open #{STATS_FILE}") if PLATFORM['darwin']
13
+ end
14
+ end
data/metric_fu.gemspec ADDED
@@ -0,0 +1,20 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "metric_fu"
3
+ s.version = "0.8.0.4"
4
+ s.summary = "Generates project metrics using Flog, RCov, Saikuro, Flay, Reek, Roodi, Railroad and more"
5
+ s.email = "jake.scruggs@gmail.com"
6
+ s.homepage = "http://metric-fu.rubyforge.org/"
7
+ s.description = "Gives you a fist full of code metrics"
8
+ s.has_rdoc = true
9
+ s.authors = ["Jake Scruggs", "Sean Soper"]
10
+ s.files = ["History.txt", "Manifest.txt", "metric_fu.gemspec", "MIT-LICENSE", "README", "TODO.txt", "lib/metric_fu", "lib/metric_fu/churn.rb", "lib/metric_fu/flog_reporter", "lib/metric_fu/flog_reporter/base.rb", "lib/metric_fu/flog_reporter/flog_reporter.css", "lib/metric_fu/flog_reporter/generator.rb", "lib/metric_fu/flog_reporter/operator.rb", "lib/metric_fu/flog_reporter/page.rb", "lib/metric_fu/flog_reporter/scanned_method.rb", "lib/metric_fu/flog_reporter.rb", "lib/metric_fu/md5_tracker.rb", "lib/metric_fu/saikuro", "lib/metric_fu/saikuro/saikuro.rb", "lib/metric_fu/saikuro/SAIKURO_README", "lib/metric_fu.rb", "lib/tasks", "lib/tasks/churn.rake", "lib/tasks/coverage.rake", "lib/tasks/flay.rake", "lib/tasks/flog.rake", "lib/tasks/metric_fu.rake", "lib/tasks/metric_fu.rb", "lib/tasks/railroad.rake", "lib/tasks/reek.rake", "lib/tasks/roodi.rake", "lib/tasks/saikuro.rake", "lib/tasks/stats.rake", "test/test_helper.rb", "test/test_md5_tracker.rb"]
11
+ s.test_files = ["test/test_md5_tracker.rb"]
12
+ s.rdoc_options = ["--main", "README"]
13
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README"]
14
+ s.add_dependency("flog", ["> 0.0.0"])
15
+ s.add_dependency("rcov", ["> 0.0.0"])
16
+ s.add_dependency("reek", ["> 0.0.0"])
17
+ s.add_dependency("flay", ["> 0.0.0"])
18
+ s.add_dependency("roodi", ["> 0.0.0"])
19
+ s.add_dependency("factorylabs-railroad", ["> 0.0.0"])
20
+ end
metadata ADDED
@@ -0,0 +1,144 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: factorylabs-metric_fu
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Jake Scruggs
8
+ - Sean Soper
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2008-12-22 00:00:00 -08:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: flog
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rcov
27
+ version_requirement:
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">"
31
+ - !ruby/object:Gem::Version
32
+ version: 0.0.0
33
+ version:
34
+ - !ruby/object:Gem::Dependency
35
+ name: reek
36
+ version_requirement:
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">"
40
+ - !ruby/object:Gem::Version
41
+ version: 0.0.0
42
+ version:
43
+ - !ruby/object:Gem::Dependency
44
+ name: flay
45
+ version_requirement:
46
+ version_requirements: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">"
49
+ - !ruby/object:Gem::Version
50
+ version: 0.0.0
51
+ version:
52
+ - !ruby/object:Gem::Dependency
53
+ name: roodi
54
+ version_requirement:
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">"
58
+ - !ruby/object:Gem::Version
59
+ version: 0.0.0
60
+ version:
61
+ - !ruby/object:Gem::Dependency
62
+ name: factorylabs-railroad
63
+ version_requirement:
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.0.0
69
+ version:
70
+ description: Gives you a fist full of code metrics
71
+ email: jake.scruggs@gmail.com
72
+ executables: []
73
+
74
+ extensions: []
75
+
76
+ extra_rdoc_files:
77
+ - History.txt
78
+ - Manifest.txt
79
+ - README
80
+ files:
81
+ - History.txt
82
+ - Manifest.txt
83
+ - metric_fu.gemspec
84
+ - MIT-LICENSE
85
+ - README
86
+ - TODO.txt
87
+ - lib/metric_fu
88
+ - lib/metric_fu/churn.rb
89
+ - lib/metric_fu/flog_reporter
90
+ - lib/metric_fu/flog_reporter/base.rb
91
+ - lib/metric_fu/flog_reporter/flog_reporter.css
92
+ - lib/metric_fu/flog_reporter/generator.rb
93
+ - lib/metric_fu/flog_reporter/operator.rb
94
+ - lib/metric_fu/flog_reporter/page.rb
95
+ - lib/metric_fu/flog_reporter/scanned_method.rb
96
+ - lib/metric_fu/flog_reporter.rb
97
+ - lib/metric_fu/md5_tracker.rb
98
+ - lib/metric_fu/saikuro
99
+ - lib/metric_fu/saikuro/saikuro.rb
100
+ - lib/metric_fu/saikuro/SAIKURO_README
101
+ - lib/metric_fu.rb
102
+ - lib/tasks
103
+ - lib/tasks/churn.rake
104
+ - lib/tasks/coverage.rake
105
+ - lib/tasks/flay.rake
106
+ - lib/tasks/flog.rake
107
+ - lib/tasks/metric_fu.rake
108
+ - lib/tasks/metric_fu.rb
109
+ - lib/tasks/railroad.rake
110
+ - lib/tasks/reek.rake
111
+ - lib/tasks/roodi.rake
112
+ - lib/tasks/saikuro.rake
113
+ - lib/tasks/stats.rake
114
+ - test/test_helper.rb
115
+ - test/test_md5_tracker.rb
116
+ has_rdoc: true
117
+ homepage: http://metric-fu.rubyforge.org/
118
+ post_install_message:
119
+ rdoc_options:
120
+ - --main
121
+ - README
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: "0"
129
+ version:
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: "0"
135
+ version:
136
+ requirements: []
137
+
138
+ rubyforge_project:
139
+ rubygems_version: 1.2.0
140
+ signing_key:
141
+ specification_version: 2
142
+ summary: Generates project metrics using Flog, RCov, Saikuro, Flay, Reek, Roodi, Railroad and more
143
+ test_files:
144
+ - test/test_md5_tracker.rb