lib/gauntlet_flay.rb
#!/usr/bin/ruby -ws $: << "lib" << "../../ParseTree/dev/lib" << "../../flay/dev/lib" $v ||= false # HACK require "rubygems" require "flay" require "gauntlet" require "pp" # :stopdoc: class FlayGauntlet < Gauntlet $owners = {} $score_file = "flay-scores.yml" $misc_error = {:total => -1, :average => -1, :methods => {}} $syntax_error = {:total => -2, :average => -2, :methods => {}} $no_gem = {:total => -4, :average => -4, :methods => {}} # copied straight from hoedown.rb my_projects = %w[InlineFortran ParseTree RubyInline RubyToC ZenHacks ZenTest bfts box_layout change_class flay flog gauntlet heckle hoe image_science miniunit minitest minitest_tu_shim png ruby2ruby ruby_parser rubyforge test-unit un vlad zenprofile zentest] MY_PROJECTS = Regexp.union(*my_projects) def run name warn name self.data[name] = score_for "." self.dirty = true end def display_report max good_data = {} bad_count = 0 zero_count = 0 @data.each do |name, flay| case when flay < 0 then bad_count += 1 when flay == 0 then zero_count += 1 else good_data[name] = flay end end scores = good_data.values # SWEET JESUS: # # without zeros: # average flay: 1487.23 +/- 7800.16 # with zeros: # average flay: 988.69 +/- 6398.45 puts "broken projects : %d" % bad_count puts "great projects : %d" % zero_count puts "bad projects : %d" % good_data.size puts "average flay : %.2f +/- %.2f" % [scores.average, scores.stddev] top = good_data.sort_by { |name,flay| -flay }.first max puts top.each_with_index do |(name, flay), i| puts "%3d: %10.2f: %s" % [ i, flay, name ] end end ############################################################ # OTHER ############################################################ def score_for dir dirs = %w(app lib test spec).reject { |f| ! File.directory? f } flay = Flay.run dirs flay.total rescue Interrupt # let us break out rescue Exception -1 end end max = (ARGV.shift || 10).to_i filter = ARGV.shift filter = Regexp.new filter if filter flayer = FlayGauntlet.new flayer.run_the_gauntlet filter flayer.display_report max # :startdoc: