require 'rubygems'
require 'hpricot'
require 'open-uri'

class SourceForgeIssue
  
  attr_reader :title, :priority, :status, :submitted_by, :resolution
  attr_reader :assigned_to, :category, :group, :visibility
  
  def initialize(issue_id)
    doc = Hpricot(open("http://sourceforge.net/tracker/?func=detail&aid=#{issue_id}&group_id=#{GROUP_ID}&atid=#{ATID}"))
    header = doc/"//div[@class='view_artifact']/div[@class='inner-bd']/div[@class='yui-t6']/div[@id='yui-main']/div[@class='yui-gc box']/div[@class='yui-u first]/span/strong"
    
    assign("title", header[1])
    
    details_left = doc/"//div[@class='view_artifact']/div[@class='inner-bd']/div[@class='yui-t6']/div[@id='yui-main']/div[@class='yui-g box']/div[@class='yui-u first']/p"
    
    assign("resolution", details_left[3])
    assign("status", details_left[2])
    assign("priority", details_left[1])
    assign("submitted_by", details_left[0])

    details_right = doc/"//div[@class='view_artifact']/div[@class='inner-bd']/div[@class='yui-t6']/div[@id='yui-main']/div[@class='yui-g box']/div[@class='yui-u']/p"
    
    assign("assigned_to", details_right[0])
    assign("category", details_right[1])
    assign("group", details_right[2])
    assign("visibility", details_right[3])
  end

  private
  
  ATID     = 418820
  GROUP_ID = 37116
  
  def assign(target, value)
    case target
    when "title"
      @title = strip(value)
      # Strip the bug id from the end of the title
      @title = @title[0..@title.length - 15]
    when "priority"
      @priority = strip(value)
    when "resolution"
      @resolution = strip(value)
    when "status"
      @status = strip(value)
    when "submitted_by"
      @submitted_by = strip(value)
    when "assigned_to"
      @assigned_to = strip(value)
    when "category"
      @category = strip(value)
    when "group"
      @group = strip(value)
    when "visibility"
      @visibility = strip(value)    
    end
    
  end
  
   def strip(s)    
    tmp = s.to_s.gsub(/<\/?[^>]*>/, "")    
  end

end

critical = [
  3061578, 3038424, 3049515, 3053104, 3060480, 
  3032758, 3052804, 3032772, 3032763
  ]

nice_to_fix= [
  3054184, 3032379, 3018770, 3017908, 3049346, 3049336, 3049515,
  3064655, 3022067, 2820025, 2721332, 2952298, 2951521, 2843146,
  3011646, 3011639, 3011638, 3011635, 2842432, 3000876, 3008511,
  2997464, 2969913, 2880939, 2879793, 2879791, 2628056
]

puts "Release Critical"
critical.each do |c|
  i = SourceForgeIssue.new(c)
  puts c.to_s + ": " + i.title
end

puts "Nice to Have Fixed"
nice_to_fix.each do |n|
  i = SourceForgeIssue.new(n)
  puts n.to_s + ": " + i.title
end
