0

I am trying to download an XML file from GitHub via Octokit::Client in Ruby. This is in a Dangerfile, so I have access to the client via github.api. I have got something working with the following code:

listing = client.contents('erik-allen/RepoName', :path => 'Root/Path')
download = open(listing[0].download_url)

I can then call Nokogiri::XML(download) and parse the XML with no issues.

However, it only works because it is the only file in the directory. It also does not feel like the correct way to do things.

I have tried a few other ways:

download = client.contents('erik-allen/RepoName', :path => 'Root/Path/File.xml')

That returned a Sawyer::Resource but I have yet to find a way to get any data from that. I tried combinations of .get.data and .data but neither worked. Calling Base64.decode64() on the result did not yield anything either. I am suspecting I may need an "accept" header, but I am not sure how I would do that with Octokit::Client. Does anyone have any suggestions. I would have assumed this would be a common task, but I can find no examples.

Erik Allen
  • 1,841
  • 2
  • 20
  • 36

1 Answers1

0

I was able to eventually figure things out. There is a content property on the Sawyer::Resource that gives the Base64 data. So the final solution is:

contents = client.contents('erik-allen/RepoName', :path => 'Root/Path/File.xml')
download = Base64.decode64(contents.content)

I can then call Nokogiri::XML(download) and parse the XML with no issues.

Erik Allen
  • 1,841
  • 2
  • 20
  • 36