make AcceptEntry behave like string

This commit is contained in:
Konstantin Haase 2013-03-10 12:39:29 +01:00
parent 2a4811b991
commit a045a3f8f6
2 changed files with 26 additions and 6 deletions

View File

@ -71,9 +71,10 @@ module Sinatra
[key, value]
end
@type = entry[/[^;]+/].delete(' ')
@entry = entry
@type = entry[/[^;]+/].delete(' ')
@params = Hash[params]
@q = @params.delete('q') { "1.0" }.to_f
@q = @params.delete('q') { "1.0" }.to_f
end
def <=>(other)
@ -85,13 +86,21 @@ module Sinatra
[ @q, -@type.count('*'), @params.size ]
end
def [](param)
@params[param]
end
def to_str
@type
end
def to_s(full = false)
full ? entry : to_str
end
def respond_to?(*args)
super or to_str.respond_to?(*args)
end
def method_missing(*args, &block)
to_str.send(*args, &block)
end
end
end

View File

@ -50,6 +50,17 @@ class RequestTest < Test::Unit::TestCase
assert_equal({ 'compress' => '0.25' }, request.preferred_type.params)
end
it "makes accept types behave like strings" do
request = Sinatra::Request.new('HTTP_ACCEPT' => 'image/jpeg; compress=0.25')
assert_equal 'image/jpeg', request.preferred_type.to_s
assert_equal 'image/jpeg', request.preferred_type.to_str
assert_equal 'image', request.preferred_type.split('/').first
String.instance_methods.each do |method|
assert request.preferred_type.respond_to? method
end
end
it "properly decodes MIME type parameters" do
request = Sinatra::Request.new(
'HTTP_ACCEPT' => 'image/jpeg;unquoted=0.25;quoted="0.25";chartest="\";,\x"'