Wrap text
Report abuse
namespace :gems do
namespace :downloads do
desc 'Print list of Gem downloads from rubyforge.org'
task :list do
require "rubygems"
require "open-uri"
require "hpricot"
def print_gems
content = ""
open("http://gems.rubyforge.org/stats.html").each do |line|
content << line
end
doc = Hpricot(content)
rows = []
doc.search("table/tr").each do |row|
rows << row.search("/").collect {|e| e.inner_html}
end
max_lengths = get_max_lengths(rows)
print_dashes max_lengths
print_row rows[0], max_lengths
print_dashes max_lengths
rows[1..-1].each do |row|
print_row(row, max_lengths)
end
print_dashes max_lengths
end
def get_max_lengths(rows)
max_lengths = [0, 0]
rows.inject(max_lengths) do |max_lengths, row|
max_lengths[0] = row[0].length if row[0].length > max_lengths[0]
max_lengths[1] = row[1].length if row[1].length > max_lengths[1]
max_lengths
end
max_lengths
end
def print_dashes(max_lengths)
puts '-' * (max_lengths[0] + max_lengths[1] + 7)
end
def print_row(row, max_lengths)
printf("| %#{max_lengths[0]}s | %#{max_lengths[1]}s |", row[0], row[1])
puts
end
print_gems
end
end
end