Make the request accept */* when HTTP_ACCEPT is not present or blank

This commit is contained in:
Patricio Mac Adden 2013-09-15 15:53:08 -03:00
parent e8899802e2
commit 4762e4a92b
2 changed files with 20 additions and 2 deletions

View File

@ -22,8 +22,12 @@ module Sinatra
# Returns an array of acceptable media types for the response
def accept
@env['sinatra.accept'] ||= begin
@env['HTTP_ACCEPT'].to_s.scan(HEADER_VALUE_WITH_PARAMS).
map! { |e| AcceptEntry.new(e) }.sort
if @env.include? 'HTTP_ACCEPT' and @env['HTTP_ACCEPT'].to_s != ''
@env['HTTP_ACCEPT'].to_s.scan(HEADER_VALUE_WITH_PARAMS).
map! { |e| AcceptEntry.new(e) }.sort
else
[AcceptEntry.new('*/*')]
end
end
end

View File

@ -75,4 +75,18 @@ class RequestTest < Test::Unit::TestCase
expected = { 'unquoted' => '0.25', 'quoted' => '0.25', 'chartest' => '";,x' }
assert_equal(expected, request.preferred_type.params)
end
it 'accepts */* when HTTP_ACCEPT is not present in the request' do
request = Sinatra::Request.new Hash.new
assert_equal 1, request.accept.size
assert request.accept?('text/html')
assert_equal '*/*', request.preferred_type.to_s
end
it 'accepts */* when HTTP_ACCEPT is blank in the request' do
request = Sinatra::Request.new 'HTTP_ACCEPT' => ''
assert_equal 1, request.accept.size
assert request.accept?('text/html')
assert_equal '*/*', request.preferred_type.to_s
end
end