diff options
author | Santiago Pastorino <santiago@wyeworks.com> | 2012-12-31 07:23:36 -0800 |
---|---|---|
committer | Santiago Pastorino <santiago@wyeworks.com> | 2012-12-31 07:23:36 -0800 |
commit | 5e5107430bccc0a536e0b264c951793d8fe62235 (patch) | |
tree | 737db392cb78d5afa407d56cacd00e38551172cb /actionpack | |
parent | 2b773e148b56e0cff3b07ef1902311688fb9fed8 (diff) | |
parent | b8c2f3c7692867dfd444d60efb18570ad0fba236 (diff) | |
download | rails-5e5107430bccc0a536e0b264c951793d8fe62235.tar.gz rails-5e5107430bccc0a536e0b264c951793d8fe62235.tar.bz2 rails-5e5107430bccc0a536e0b264c951793d8fe62235.zip |
Merge pull request #8662 from senny/8661_should_not_append_charset_if_already_present
Charset should not be appended to image/* type
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/CHANGELOG.md | 6 | ||||
-rw-r--r-- | actionpack/lib/action_controller/metal/head.rb | 1 | ||||
-rw-r--r-- | actionpack/lib/action_dispatch/http/response.rb | 8 | ||||
-rw-r--r-- | actionpack/test/controller/render_test.rb | 13 |
4 files changed, 25 insertions, 3 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index 57b8b5dfc9..d2380c0881 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,5 +1,11 @@ ## Rails 4.0.0 (unreleased) ## +* Do not append `charset=` parameter when `head` is called with a + `:content_type` option. + Fix #8661. + + *Yves Senn* + * Added `Mime::NullType` class. This allows to use html?, xml?, json?..etc when the `format` of `request` is unknown, without raise an exception. diff --git a/actionpack/lib/action_controller/metal/head.rb b/actionpack/lib/action_controller/metal/head.rb index bbace49fd9..8237db15ca 100644 --- a/actionpack/lib/action_controller/metal/head.rb +++ b/actionpack/lib/action_controller/metal/head.rb @@ -31,6 +31,7 @@ module ActionController if include_content?(self.status) self.content_type = content_type || (Mime[formats.first] if formats) + self.response.charset = false if self.response self.response_body = " " else headers.delete('Content-Type') diff --git a/actionpack/lib/action_dispatch/http/response.rb b/actionpack/lib/action_dispatch/http/response.rb index 0f808ac9cf..91cf4784db 100644 --- a/actionpack/lib/action_dispatch/http/response.rb +++ b/actionpack/lib/action_dispatch/http/response.rb @@ -260,14 +260,18 @@ module ActionDispatch # :nodoc: return if headers[CONTENT_TYPE].present? @content_type ||= Mime::HTML - @charset ||= self.class.default_charset + @charset ||= self.class.default_charset unless @charset == false type = @content_type.to_s.dup - type << "; charset=#{@charset}" unless @sending_file + type << "; charset=#{@charset}" if append_charset? headers[CONTENT_TYPE] = type end + def append_charset? + !@sending_file && @charset != false + end + def rack_response(status, header) assign_default_content_type_and_charset!(header) handle_conditional_get! diff --git a/actionpack/test/controller/render_test.rb b/actionpack/test/controller/render_test.rb index 6d91415e4f..c7a66f4298 100644 --- a/actionpack/test/controller/render_test.rb +++ b/actionpack/test/controller/render_test.rb @@ -531,6 +531,10 @@ class TestController < ActionController::Base head :created, :content_type => "application/json" end + def head_ok_with_image_png_content_type + head :ok, :content_type => "image/png" + end + def head_with_location_header head :location => "/foo" end @@ -1224,10 +1228,17 @@ class RenderTest < ActionController::TestCase def test_head_created_with_application_json_content_type post :head_created_with_application_json_content_type assert_blank @response.body - assert_equal "application/json", @response.content_type + assert_equal "application/json", @response.header["Content-Type"] assert_response :created end + def test_head_ok_with_image_png_content_type + post :head_ok_with_image_png_content_type + assert_blank @response.body + assert_equal "image/png", @response.header["Content-Type"] + assert_response :ok + end + def test_head_with_location_header get :head_with_location_header assert_blank @response.body |