Grammar and stream of consciousness cleanup for Channel and Scheduler rdoc
[rbx.git] / bin / contributors.rb
blob39126cb4374fca689dd5679c1bd8a4e1ea72c048
1 #!/usr/bin/env ruby
3 # Options handling
4 require 'optparse'
5 require 'ostruct'
7 now            = Time.now
8 NOW            = "#{now.year}-#{'%02d' % now.month}-#{'%02d' % now.day}-" +
9                  "#{'%02d' % now.hour}-#{'%02d' % now.min}-#{'%02d' % now.sec}"
11 OPTIONS = OpenStruct.new( :size   => 1024,
12                           :path   => './' )
14 options = OptionParser.new do |opts|
15   opts.on('-c', '--chart [FILENAME]', 'Output passing test times to SVG file at --path') do |c|
16     OPTIONS.chart = c || "#{NOW}-contributors.svg"
17   end
19   opts.on('-p', '--path PATH', 'Path prefix for --chart, --diff-chart, and --file') do |p|
20     OPTIONS.path = p
21   end
23   opts.on('-s', '--size PIXELS', 'Size, in pixels, of --chart and/or --diff-chart') do |s|
24     OPTIONS.size = s
25   end
26 end
28 options.parse!
30 if OPTIONS.help then
31   puts options.summarize
32   exit
33 end
35 class Contributor
36   include Comparable 
38   attr_accessor :name,:lines
40   def initialize(name,lines)
41     @name = name
42     @lines = lines
43   end
45   def <=>(other) 
46     @lines <=> other.lines
47   end 
48 end
50 contributors = []
52 while l = gets
53   lines,name = l.match(/^\s*(\d+) (.+)/)[1,2]
54   contributors << Contributor.new(name,lines.to_i)
55 end
57 contributors.sort!
58 contributors.reverse!
60 contributors.each do |c|
61   puts "#{c.name}, #{c.lines}"
62 end
64 if OPTIONS.chart then
65   require 'rubygems'
66   require 'scruffy'
68   graph = Scruffy::Graph.new
69   
70   graph << Scruffy::Layers::Line.new( :title  => 'Rubinius LOC by contributor',
71                                       :points => contributors.collect { |c| c.lines } )
73   graph.point_markers = contributors.collect { |c| c.name }
75   puts "Rendering chart to #{OPTIONS.chart}"
77   graph.render( :width => OPTIONS.size, :to => OPTIONS.path + OPTIONS.chart )
78 end