Allow for respond_to(:html, :js, :xml) (closes #4277) [Caio Chassot]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3919 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 7e465711
...@@ -5,9 +5,11 @@ def self.included(base) ...@@ -5,9 +5,11 @@ def self.included(base)
end end
module InstanceMethods module InstanceMethods
def respond_to(&block) def respond_to(*types, &block)
raise ArgumentError, "respond_to takes either types or a block, never bot" unless types.any? ^ block
block ||= lambda { |responder| types.each { |type| responder.send(type) } }
responder = Responder.new(block.binding) responder = Responder.new(block.binding)
yield responder block.call(responder)
responder.respond responder.respond
end end
end end
......
...@@ -40,6 +40,10 @@ def using_defaults ...@@ -40,6 +40,10 @@ def using_defaults
end end
end end
def using_defaults_with_type_list
respond_to(:html, :js, :xml)
end
def using_argument_defaults def using_argument_defaults
person_in_xml = { :name => "David" }.to_xml(:root => "person") person_in_xml = { :name => "David" }.to_xml(:root => "person")
respond_to do |type| respond_to do |type|
...@@ -155,6 +159,20 @@ def test_using_defaults ...@@ -155,6 +159,20 @@ def test_using_defaults
assert_equal "<p>Hello world!</p>\n", @response.body assert_equal "<p>Hello world!</p>\n", @response.body
end end
def test_using_defaults_with_type_list
@request.env["HTTP_ACCEPT"] = "*/*"
get :using_defaults_with_type_list
assert_equal 'Hello world!', @response.body
@request.env["HTTP_ACCEPT"] = "text/javascript"
get :using_defaults_with_type_list
assert_equal '$("body").visualEffect("highlight");', @response.body
@request.env["HTTP_ACCEPT"] = "application/xml"
get :using_defaults_with_type_list
assert_equal "<p>Hello world!</p>\n", @response.body
end
def test_using_argument_defaults def test_using_argument_defaults
@request.env["HTTP_ACCEPT"] = "application/xml" @request.env["HTTP_ACCEPT"] = "application/xml"
get :using_argument_defaults get :using_argument_defaults
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册