aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/lib/action_controller/mime_responds.rb16
-rw-r--r--actionpack/lib/action_view/base.rb2
-rw-r--r--actionpack/test/controller/layout_test.rb1
-rw-r--r--actionpack/test/controller/mime_responds_test.rb44
-rw-r--r--actionpack/test/fixtures/respond_to/all_types_with_layout.rhtml1
-rw-r--r--actionpack/test/fixtures/respond_to/all_types_with_layout.rjs1
-rw-r--r--actionpack/test/fixtures/respond_to/layouts/standard.rhtml1
7 files changed, 37 insertions, 29 deletions
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 <tt>local_assigns</tt>
# 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 "<p>Hello world!</p>\n", @response.body
end
- def test_using_argument_defaults
- @request.env["HTTP_ACCEPT"] = "application/xml"
- get :using_argument_defaults
- assert_equal "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<person>\n <name>David</name>\n</person>\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 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<person>\n <name>David</name>\n</person>\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>HTML for all_types_with_layout</html>', @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 @@
+<html><%= @content_for_layout %></html> \ No newline at end of file