From cc6e8ae57a4a886d68cfa95829fcb7a65a273cab Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 18 Mar 2006 21:17:14 +0000 Subject: Removed XML argument style for respond_to, so type.xml(object.to_xml) no longer works -- it wasnt worth the exception git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3944 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/mime_responds.rb | 16 +++----- actionpack/lib/action_view/base.rb | 2 +- actionpack/test/controller/layout_test.rb | 1 - actionpack/test/controller/mime_responds_test.rb | 44 ++++++++++++++-------- .../respond_to/all_types_with_layout.rhtml | 1 + .../fixtures/respond_to/all_types_with_layout.rjs | 1 + .../fixtures/respond_to/layouts/standard.rhtml | 1 + 7 files changed, 37 insertions(+), 29 deletions(-) create mode 100644 actionpack/test/fixtures/respond_to/all_types_with_layout.rhtml create mode 100644 actionpack/test/fixtures/respond_to/all_types_with_layout.rjs create mode 100644 actionpack/test/fixtures/respond_to/layouts/standard.rhtml diff --git a/actionpack/lib/action_controller/mime_responds.rb b/actionpack/lib/action_controller/mime_responds.rb index d492b6c258..4dad2c96d2 100644 --- a/actionpack/lib/action_controller/mime_responds.rb +++ b/actionpack/lib/action_controller/mime_responds.rb @@ -18,8 +18,7 @@ module ActionController #:nodoc: DEFAULT_BLOCKS = { :html => 'Proc.new { render }', :js => 'Proc.new { render :action => "#{action_name}.rjs" }', - :xml => 'Proc.new { render :action => "#{action_name}.rxml" }', - :xml_arg => 'Proc.new { render :xml => __mime_responder_arg__ }' + :xml => 'Proc.new { render :action => "#{action_name}.rxml" }' } def initialize(block_binding) @@ -29,7 +28,7 @@ module ActionController #:nodoc: @responses = {} end - def custom(mime_type, *args, &block) + def custom(mime_type, &block) mime_type = mime_type.is_a?(Mime::Type) ? mime_type : Mime::Type.lookup(mime_type.to_s) @order << mime_type @@ -37,19 +36,14 @@ module ActionController #:nodoc: if block_given? @responses[mime_type] = block else - if argument = args.first - eval("__mime_responder_arg__ = #{argument.is_a?(String) ? argument.inspect : argument}", @block_binding) - @responses[mime_type] = eval(DEFAULT_BLOCKS[(mime_type.to_sym.to_s + "_arg").to_sym], @block_binding) - else - @responses[mime_type] = eval(DEFAULT_BLOCKS[mime_type.to_sym], @block_binding) - end + @responses[mime_type] = eval(DEFAULT_BLOCKS[mime_type.to_sym], @block_binding) end end for mime_type in %w( all html js xml rss atom yaml ) eval <<-EOT - def #{mime_type}(argument = nil, &block) - custom(Mime::#{mime_type.upcase}, argument, &block) + def #{mime_type}(&block) + custom(Mime::#{mime_type.upcase}, &block) end EOT end diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb index b118ee1042..dff5a365d4 100644 --- a/actionpack/lib/action_view/base.rb +++ b/actionpack/lib/action_view/base.rb @@ -218,7 +218,7 @@ module ActionView #:nodoc: # it's relative to the template_root, otherwise it's absolute. The hash in local_assigns # is made available as local variables. def render_file(template_path, use_full_path = true, local_assigns = {}) - @first_render = template_path if @first_render.nil? + @first_render = template_path if @first_render.nil? if use_full_path template_path_without_extension, template_extension = path_and_extension(template_path) diff --git a/actionpack/test/controller/layout_test.rb b/actionpack/test/controller/layout_test.rb index cffd4d388e..c7db19ccc9 100644 --- a/actionpack/test/controller/layout_test.rb +++ b/actionpack/test/controller/layout_test.rb @@ -70,5 +70,4 @@ class LayoutAutoDiscoveryTest < Test::Unit::TestCase assert_equal 'layouts/controller_name_space/nested', @controller.active_layout assert_equal 'controller_name_space/nested.rhtml hello.rhtml', @response.body end - end \ No newline at end of file diff --git a/actionpack/test/controller/mime_responds_test.rb b/actionpack/test/controller/mime_responds_test.rb index 06addad2ea..6fe14bf65b 100644 --- a/actionpack/test/controller/mime_responds_test.rb +++ b/actionpack/test/controller/mime_responds_test.rb @@ -1,6 +1,8 @@ require File.dirname(__FILE__) + '/../abstract_unit' class RespondToController < ActionController::Base + layout :set_layout + def html_xml_or_rss respond_to do |type| type.html { render :text => "HTML" } @@ -44,14 +46,6 @@ class RespondToController < ActionController::Base respond_to(:html, :js, :xml) end - def using_argument_defaults - person_in_xml = { :name => "David" }.to_xml(:root => "person") - respond_to do |type| - type.html - type.xml(person_in_xml) - end - end - def made_for_content_type respond_to do |type| type.rss { render :text => "RSS" } @@ -75,9 +69,23 @@ class RespondToController < ActionController::Base end end + def all_types_with_layout + respond_to do |type| + type.html + type.js + end + end + def rescue_action(e) raise end + + protected + def set_layout + if action_name == "all_types_with_layout" + "standard" + end + end end RespondToController.template_root = File.dirname(__FILE__) + "/../fixtures/" @@ -173,12 +181,6 @@ class MimeControllerTest < Test::Unit::TestCase assert_equal "

Hello world!

\n", @response.body end - def test_using_argument_defaults - @request.env["HTTP_ACCEPT"] = "application/xml" - 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 @@ -195,8 +197,8 @@ class MimeControllerTest < Test::Unit::TestCase assert_equal 'JS', @response.body @request.env["HTTP_ACCEPT"] = "application/x-xml" - get :using_argument_defaults - assert_equal "\n\n David\n\n", @response.body + get :html_xml_or_rss + assert_equal "XML", @response.body end def test_custom_types @@ -234,4 +236,14 @@ class MimeControllerTest < Test::Unit::TestCase get :handle_any assert_equal 'Either JS or XML', @response.body end + + def test_all_types_with_layout + @request.env["HTTP_ACCEPT"] = "text/javascript" + get :all_types_with_layout + assert_equal 'RJS for all_types_with_layout', @response.body + + @request.env["HTTP_ACCEPT"] = "text/html" + get :all_types_with_layout + assert_equal 'HTML for all_types_with_layout', @response.body + end end \ No newline at end of file diff --git a/actionpack/test/fixtures/respond_to/all_types_with_layout.rhtml b/actionpack/test/fixtures/respond_to/all_types_with_layout.rhtml new file mode 100644 index 0000000000..84a84049f8 --- /dev/null +++ b/actionpack/test/fixtures/respond_to/all_types_with_layout.rhtml @@ -0,0 +1 @@ +HTML for all_types_with_layout \ No newline at end of file diff --git a/actionpack/test/fixtures/respond_to/all_types_with_layout.rjs b/actionpack/test/fixtures/respond_to/all_types_with_layout.rjs new file mode 100644 index 0000000000..b7aec7c505 --- /dev/null +++ b/actionpack/test/fixtures/respond_to/all_types_with_layout.rjs @@ -0,0 +1 @@ +page << "RJS for all_types_with_layout" \ No newline at end of file diff --git a/actionpack/test/fixtures/respond_to/layouts/standard.rhtml b/actionpack/test/fixtures/respond_to/layouts/standard.rhtml new file mode 100644 index 0000000000..fcb28ec755 --- /dev/null +++ b/actionpack/test/fixtures/respond_to/layouts/standard.rhtml @@ -0,0 +1 @@ +<%= @content_for_layout %> \ No newline at end of file -- cgit v1.2.3