From 9e2932f816b0cac68361bb5adcdad3e4c3caeb04 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 12 Mar 2006 05:13:55 +0000 Subject: Assume that we accept what we give [DHH] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3843 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/mime_type.rb | 2 +- actionpack/lib/action_controller/request.rb | 12 +++++++++--- actionpack/test/controller/mime_responds_test.rb | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) (limited to 'actionpack') diff --git a/actionpack/lib/action_controller/mime_type.rb b/actionpack/lib/action_controller/mime_type.rb index 0ab0221007..15dbc70915 100644 --- a/actionpack/lib/action_controller/mime_type.rb +++ b/actionpack/lib/action_controller/mime_type.rb @@ -39,6 +39,6 @@ module Mime JAVASCRIPT = Type.new "text/javascript" XML = Type.new "application/xml" RSS = Type.new "application/rss+xml" - ATOM = Type.new "application/rss+atom" + ATOM = Type.new "application/atom+xml" YAML = Type.new "application/x-yaml" end \ No newline at end of file diff --git a/actionpack/lib/action_controller/request.rb b/actionpack/lib/action_controller/request.rb index 16acc50011..300a0ea60c 100755 --- a/actionpack/lib/action_controller/request.rb +++ b/actionpack/lib/action_controller/request.rb @@ -51,7 +51,7 @@ module ActionController return @content_type if @content_type @content_type = @env['CONTENT_TYPE'].to_s.downcase - + if @env['HTTP_X_POST_DATA_FORMAT'] case @env['HTTP_X_POST_DATA_FORMAT'].downcase.to_sym when :yaml @@ -65,8 +65,14 @@ module ActionController end def accepts - @accepts ||= (@env['HTTP_ACCEPT'].strip.blank? ? "*/*" : @env['HTTP_ACCEPT']).split(";").collect! do |mime_type| - Mime::Type.new(mime_type.strip) + return @accepts if @accepts + + @accepts = if @env['HTTP_ACCEPT'].to_s.strip.blank? + [ content_type, Mime::ALL ] + else + @env['HTTP_ACCEPT'].split(";").collect! do |mime_type| + Mime::Type.new(mime_type.strip) + end end end diff --git a/actionpack/test/controller/mime_responds_test.rb b/actionpack/test/controller/mime_responds_test.rb index f2aa45a168..184110aad1 100644 --- a/actionpack/test/controller/mime_responds_test.rb +++ b/actionpack/test/controller/mime_responds_test.rb @@ -48,6 +48,14 @@ class RespondToController < ActionController::Base end end + def made_for_content_type + respond_to do |type| + type.rss { render :text => "RSS" } + type.atom { render :text => "ATOM" } + type.all { render :text => "Nothing" } + end + end + def rescue_action(e) raise unless ActionController::MissingTemplate === e end @@ -137,4 +145,14 @@ class MimeControllerTest < Test::Unit::TestCase get :using_argument_defaults assert_equal "\n\n David\n\n", @response.body end + + def test_with_content_type + @request.env["CONTENT_TYPE"] = "application/atom+xml" + get :made_for_content_type + assert_equal "ATOM", @response.body + + @request.env["CONTENT_TYPE"] = "application/rss+xml" + get :made_for_content_type + assert_equal "RSS", @response.body + end end \ No newline at end of file -- cgit v1.2.3