require 'hpricot'
require 'open-uri'
class LighthouseController < OSX::NSObject
ib_outlet :lighthouse_view
ib_outlet :application_controller
def awakeFromNib
@project_url = "http://%s.lighthouseapp.com/projects/%i"
@repo = @application_controller.repo
unless @repo.nil?
return unless setup_api_credentials
setup_lighthouse_view
begin_loading_tickets
end
end
# NSURLConnection delegate methods
def connection_didReceiveResponse(connection, response)
@data.length = 0
end
def connection_didReceiveData(connection, data)
@data.appendData(data)
end
def connectionDidFinishLoading(connection)
error = NSError.errorWithDomain_code_userInfo("Invalid XML", NSXMLParserErrorDomain, nil)
data = NSXMLDocument.alloc.initWithData_options_error(@data, NSXMLDocumentValidate, error)
#raise error.description unless error.description.blank?
update_main_document(data)
end
private
def setup_lighthouse_view
lighthouse_view = File.join(NSBundle.mainBundle.bundlePath, "Contents", "Resources", "lighthouse.html")
@lighthouse_view.mainFrame.loadRequest(NSURLRequest.requestWithURL(NSURL.fileURLWithPath(lighthouse_view)))
end
def setup_api_credentials
@lighthouse = {
:key => @repo.config["lighthouse.key"],
:project => @repo.config["lighthouse.project"],
:account => @repo.config["lighthouse.account"]
}
if @lighthouse[:key].nil? || @lighthouse[:project].nil? || @lighthouse[:account].nil?
return false
end
return true
end
def begin_loading_tickets
tickets_url = "#{@project_url}/tickets.xml" % [@lighthouse[:account], @lighthouse[:project]]
request = NSMutableURLRequest.objc_send(:requestWithURL, NSURL.URLWithString(tickets_url),
:cachePolicy, NSURLRequestUseProtocolCachePolicy,
:timeoutInterval, 60.0)
request.setValue_forHTTPHeaderField(@lighthouse[:key], "X-LighthouseToken")
connection = NSURLConnection.alloc.initWithRequest_delegate(request, self)
if connection
@data = NSMutableData.data
else
puts "Connection couldn't be established"
end
end
def update_main_document(data)
error = nil
tickets = data.xpath("//ticket")
puts tickets[0].xpath("//body-html").to_s
end
end