From 4762e4a92bab58d1973c5b3500a3db2e01149e38 Mon Sep 17 00:00:00 2001 From: Patricio Mac Adden Date: Sun, 15 Sep 2013 15:53:08 -0300 Subject: [PATCH] Make the request accept */* when HTTP_ACCEPT is not present or blank --- lib/sinatra/base.rb | 8 ++++++-- test/request_test.rb | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb index 5ff18f13..bf3db78e 100644 --- a/lib/sinatra/base.rb +++ b/lib/sinatra/base.rb @@ -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 diff --git a/test/request_test.rb b/test/request_test.rb index 95257541..69e39083 100644 --- a/test/request_test.rb +++ b/test/request_test.rb @@ -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