diff --git a/lib/travis/api/app/helpers/mime_types.rb b/lib/travis/api/app/helpers/mime_types.rb index 9e002e62..cf31b505 100644 --- a/lib/travis/api/app/helpers/mime_types.rb +++ b/lib/travis/api/app/helpers/mime_types.rb @@ -18,6 +18,10 @@ class Travis::Api::App def png? request.accept =~ %r(image/png) end + + def atom? + request.accept =~ %r(application/atom+xml) + end end end end diff --git a/lib/travis/api/app/middleware/rewrite.rb b/lib/travis/api/app/middleware/rewrite.rb index 8ac8b9f2..1f1a6f86 100644 --- a/lib/travis/api/app/middleware/rewrite.rb +++ b/lib/travis/api/app/middleware/rewrite.rb @@ -3,7 +3,7 @@ require 'travis/api/app' class Travis::Api::App class Middleware class Rewrite < Middleware - FORMAT = %r(\.(json|xml|png|txt)$) + FORMAT = %r(\.(json|xml|png|txt|atom)$) V1_REPO_URL = %r(^(/[^/]+/[^/]+(?:/builds(?:/[\d]+)?|/cc)?)$) helpers :accept @@ -56,6 +56,10 @@ class Travis::Api::App env['travis.format'] == 'xml' end + def atom? + env['travis.format'] == 'atom' + end + def v1? accept_version == 'v1' end diff --git a/spec/integration/v1/repositories_spec.rb b/spec/integration/v1/repositories_spec.rb index c06e68bd..a7482a94 100644 --- a/spec/integration/v1/repositories_spec.rb +++ b/spec/integration/v1/repositories_spec.rb @@ -102,5 +102,13 @@ describe 'v1 repos' do response = get '/repositories/svenfuchs/minimal/builds', {}, headers response.content_type.should =~ /^application\/atom\+xml/ end - end + end + + context 'with .atom extension and "Accept: */*" header' do + let(:headers) { { 'HTTP_ACCEPT' => '*/*' } } + it 'GET /repositories/svenfuchs/minimal/builds.atom' do + response = get '/repositories/svenfuchs/minimal/builds.atom', {}, headers + response.content_type.should =~ /^application\/atom\+xml/ + end + end end diff --git a/spec/integration/v2/repositories_spec.rb b/spec/integration/v2/repositories_spec.rb index 297cd1e8..fcf89a1f 100644 --- a/spec/integration/v2/repositories_spec.rb +++ b/spec/integration/v2/repositories_spec.rb @@ -147,4 +147,12 @@ describe 'Repos' do response.content_type.should =~ /^application\/atom\+xml/ end end + + context 'with .atom extension' do + let(:headers) { { 'HTTP_ACCEPT' => '*/*' } } + it 'GET /repositories/svenfuchs/minimal/builds.atom' do + response = get '/repositories/svenfuchs/minimal/builds.atom', {}, headers + response.content_type.should =~ /^application\/atom\+xml/ + end + end end