process text/* if it appears in the middle of

HTTP_ACCEPT parameter
This commit is contained in:
Neeraj Singh
2010-11-25 01:24:45 +08:00
committed by José Valim
parent 5c9abb6cca
commit 18adbe9347
2 changed files with 25 additions and 1 deletions

View File

@@ -120,7 +120,11 @@ module Mime
params, q = header.split(/;\s*q=/)
if params
params.strip!
list << AcceptItem.new(index, params, q) unless params.empty?
if params =~ TRAILING_STAR_REGEXP
parse_data_with_trailing_star($1).each { |m| list << AcceptItem.new(index, m.to_s, q) }
else
list << AcceptItem.new(index, params, q) unless params.empty?
end
end
end
list.sort!

View File

@@ -29,6 +29,26 @@ class MimeTypeTest < ActiveSupport::TestCase
end
end
test "parse text with trailing star at the beginning" do
accept = "text/*, text/html, application/json, multipart/form-data"
expect = [Mime::JSON, Mime::XML, Mime::ICS, Mime::HTML, Mime::CSS, Mime::CSV, Mime::TEXT, Mime::YAML, Mime::JS, Mime::MULTIPART_FORM]
parsed = Mime::Type.parse(accept)
assert_equal expect.size, parsed.size
Range.new(0,expect.size-1).to_a.each do |index|
assert_equal expect[index], parsed[index], "Failed for index number #{index}"
end
end
test "parse text with trailing star in the end" do
accept = "text/html, application/json, multipart/form-data, text/*"
expect = [Mime::HTML, Mime::JSON, Mime::MULTIPART_FORM, Mime::XML, Mime::ICS, Mime::CSS, Mime::CSV, Mime::JS, Mime::YAML, Mime::TEXT]
parsed = Mime::Type.parse(accept)
assert_equal 10, parsed.size
Range.new(0,expect.size-1).to_a.each do |index|
assert_equal expect[index], parsed[index], "Failed for index number #{index}"
end
end
test "parse text with trailing star" do
accept = "text/*"
expect = [Mime::JSON, Mime::XML, Mime::ICS, Mime::HTML, Mime::CSS, Mime::CSV, Mime::JS, Mime::YAML, Mime::TEXT].sort_by(&:to_s)