factorylabs-metric_fu 0.8.0.4

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