aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorNeeraj Singh <neerajdotname@gmail.com>2010-11-25 01:24:45 +0800
committerJosé Valim <jose.valim@gmail.com>2010-11-25 04:38:51 +0800
commit18adbe9347727dc3eefe46395d52aafa347a0c73 (patch)
treee94d7b5f781406c21438186b769fdebe513fed4a /actionpack
parent5c9abb6cca4b6de7146c94779a34ae943e4ea4d8 (diff)
downloadrails-18adbe9347727dc3eefe46395d52aafa347a0c73.tar.gz
rails-18adbe9347727dc3eefe46395d52aafa347a0c73.tar.bz2
rails-18adbe9347727dc3eefe46395d52aafa347a0c73.zip
process text/* if it appears in the middle of
HTTP_ACCEPT parameter
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_dispatch/http/mime_type.rb6
-rw-r--r--actionpack/test/dispatch/mime_type_test.rb20
2 files changed, 25 insertions, 1 deletions
diff --git a/actionpack/lib/action_dispatch/http/mime_type.rb b/actionpack/lib/action_dispatch/http/mime_type.rb
index 5ea49a23c7..08eab5634a 100644
--- a/actionpack/lib/action_dispatch/http/mime_type.rb
+++ b/actionpack/lib/action_dispatch/http/mime_type.rb
@@ -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!
diff --git a/actionpack/test/dispatch/mime_type_test.rb b/actionpack/test/dispatch/mime_type_test.rb
index 25e106f519..9424d88498 100644
--- a/actionpack/test/dispatch/mime_type_test.rb
+++ b/actionpack/test/dispatch/mime_type_test.rb
@@ -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)