Quality.rake
require 'flog'
require 'flay'
require 'roodi'
require 'roodi_task'
require 'metric_fu'
desc "Analyze for code complexity"
task :flog do
flog = Flog.new
flog.flog_files ['app']
threshold = 40
bad_methods = flog.totals.select do |name, score|
score > threshold
end
bad_methods.sort { |a,b| a[1] <=> b[1] }.each do |name, score|
puts "%8.1f: %s" % [score, name]
end
raise "#{bad_methods.size} methods have a flog complexity > #{threshold}" unless bad_methods.empty?
end
desc "Analyze for code duplication"
task :flay do
threshold = 25
flay = Flay.new({:fuzzy => false, :verbose => false, :mass => threshold})
flay.process(*Flay.expand_dirs_to_files(['app']))
flay.report
raise "#{flay.masses.size} chunks of code have a duplicate mass > #{threshold}" unless flay.masses.empty?
end
RoodiTask.new 'roodi', ['app/**/*.rb'], 'roodi.yml'
task :quality => [:flog, :flay, :roodi, 'metrics:all']
Original snippet written by Marty Andrews
Last updated at 11:29 AM on Jun 06, 2009