steveh (owner)

Fork Of

Revisions

gist: 130565 Download_button fork
public
Public Clone URL: git://gist.github.com/130565.git
quality.rake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# extracted from marty andrew's presentation on ruby static code analysis
# http://www.slideshare.net/martin_j_andrews/code-quality-analysis
 
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', 'lib']
  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', 'lib/**/*.rb']
 
task :quality => [:flog, :flay, :roodi, 'metrics:all']