Quality.rake

Tagged with rake Rails test Flog Flay Roodi Metric_fu

Language: Ruby

View as text

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

SnippetStash costs money to host and develop. The service is free for everyone to use
but if you found it useful please consider making a small donation.