Lock down to GitHub API v3 for future compatibility

Every API request will now declare that it wants v3 by setting
"Accept: application/vnd.github.v3+json".

http://developer.github.com/v3/media/
This commit is contained in:
Mislav Marohnić 2013-12-20 17:33:38 +01:00
Родитель 431bb031c2
Коммит 0c86e6acef
4 изменённых файлов: 11 добавлений и 2 удалений

Просмотреть файл

@ -11,6 +11,7 @@ Feature: hub checkout <PULLREQ-URL>
Given the GitHub API server: Given the GitHub API server:
""" """
get('/repos/mojombo/jekyll/pulls/77') { get('/repos/mojombo/jekyll/pulls/77') {
halt 406 unless request.env['HTTP_ACCEPT'] == 'application/vnd.github.v3+json'
json :head => { json :head => {
:label => 'mislav:fixes', :label => 'mislav:fixes',
:repo => { :private => false } :repo => { :private => false }

Просмотреть файл

@ -42,6 +42,7 @@ Feature: hub fork
Given the GitHub API server: Given the GitHub API server:
""" """
get('/repos/mislav/dotfiles') { get('/repos/mislav/dotfiles') {
halt 406 unless request.env['HTTP_ACCEPT'] == 'application/vnd.github.v3+json'
json :parent => { :html_url => 'https://github.com/unrelated/dotfiles' } json :parent => { :html_url => 'https://github.com/unrelated/dotfiles' }
} }
""" """

Просмотреть файл

@ -123,7 +123,7 @@ module Hub
res.error! unless res.success? res.error! unless res.success?
raw_url = res.data['files'].values.first['raw_url'] raw_url = res.data['files'].values.first['raw_url']
res = get(raw_url) do |req| res = get(raw_url) do |req|
req['Accept'] = '*/*' req['Accept'] = 'text/plain'
end end
res.error! unless res.success? res.error! unless res.success?
res.body res.body
@ -228,6 +228,7 @@ module Hub
req['User-Agent'] = "Hub #{Hub::VERSION}" req['User-Agent'] = "Hub #{Hub::VERSION}"
apply_authentication(req, url) apply_authentication(req, url)
yield req if block_given? yield req if block_given?
finalize_request(req, url)
begin begin
res = http.start { http.request(req) } res = http.start { http.request(req) }
@ -261,6 +262,12 @@ module Hub
req.basic_auth user, pass req.basic_auth user, pass
end end
def finalize_request(req, url)
if !req['Accept'] || req['Accept'] == '*/*'
req['Accept'] = 'application/vnd.github.v3+json'
end
end
def create_connection url def create_connection url
use_ssl = 'https' == url.scheme use_ssl = 'https' == url.scheme

Просмотреть файл

@ -190,7 +190,7 @@ class HubTest < Minitest::Test
})) }))
stub_request(:get, "https://gist.github.com/raw/8da7fb575debd88c54cf/SHA/file.diff"). stub_request(:get, "https://gist.github.com/raw/8da7fb575debd88c54cf/SHA/file.diff").
with(:headers => {'Accept'=>'*/*'}). with(:headers => {'Accept'=>'text/plain'}).
to_return(:status => 200) to_return(:status => 200)
with_tmpdir('/tmp/') do with_tmpdir('/tmp/') do