From da3282f493f633147e271b580475998abffb4d4f Mon Sep 17 00:00:00 2001 From: sbonami Date: Fri, 25 Oct 2013 20:46:40 -0400 Subject: [PATCH] Fix Request#accept? NoMethodError Allow Request#accept? to return false when type parameter does not match any of the preferred types. When `preferred_type(type)` returns nil, `include?` will throw a NoMethodError. By converting output to a string, `include?` will return false. --- lib/sinatra/base.rb | 2 +- test/request_test.rb | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb index 59bfba31..40f5e827 100644 --- a/lib/sinatra/base.rb +++ b/lib/sinatra/base.rb @@ -32,7 +32,7 @@ module Sinatra end def accept?(type) - preferred_type(type).include?(type) + preferred_type(type).to_s.include?(type) end def preferred_type(*types) diff --git a/test/request_test.rb b/test/request_test.rb index 69e39083..63688f91 100644 --- a/test/request_test.rb +++ b/test/request_test.rb @@ -89,4 +89,9 @@ class RequestTest < Test::Unit::TestCase assert request.accept?('text/html') assert_equal '*/*', request.preferred_type.to_s end + + it 'does not accept */* when parameter does not match HTTP_ACCEPT' do + request = Sinatra::Request.new 'HTTP_ACCEPT' => 'application/json' + assert !request.accept?('text/html') + end end