1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Make sure respond_with with :js tries to render a template in all cases

This commit is contained in:
José Valim 2011-06-30 11:47:14 -03:00
parent 35cdd256c0
commit 9c9ec2172e
4 changed files with 23 additions and 6 deletions

View file

@ -30,6 +30,8 @@
*Rails 3.1.0 (unreleased)*
* Make sure respond_with with :js tries to render a template in all cases [José Valim]
* json_escape will now return a SafeBuffer string if it receives SafeBuffer string [tenderlove]
* Make sure escape_js returns SafeBuffer string if it receives SafeBuffer string [Prem Sichanugrist]

View file

@ -162,6 +162,11 @@ module ActionController #:nodoc:
navigation_behavior(e)
end
# to_js simply tries to render a template. If no template is found, raises the error.
def to_js
default_render
end
# All other formats follow the procedure below. First we try to render a
# template, if the template is not available, we verify if the resource
# responds to :to_format and display it.

View file

@ -509,7 +509,7 @@ end
class RespondWithController < ActionController::Base
respond_to :html, :json
respond_to :xml, :except => :using_resource_with_block
respond_to :js, :only => [ :using_resource_with_block, :using_resource ]
respond_to :js, :only => [ :using_resource_with_block, :using_resource, :using_hash_resource ]
def using_resource
respond_with(resource)
@ -575,11 +575,6 @@ protected
def resource
Customer.new("david", request.delete? ? nil : 13)
end
def _render_js(js, options)
self.content_type ||= Mime::JS
self.response_body = js.respond_to?(:to_js) ? js.to_js : js
end
end
class InheritedRespondWithController < RespondWithController
@ -638,6 +633,20 @@ class RespondWithControllerTest < ActionController::TestCase
end
end
def test_using_resource_with_js_simply_tries_to_render_the_template
@request.accept = "text/javascript"
get :using_resource
assert_equal "text/javascript", @response.content_type
assert_equal "alert(\"Hi\");", @response.body
end
def test_using_hash_resource_with_js_raises_an_error_if_template_cant_be_found
@request.accept = "text/javascript"
assert_raise ActionView::MissingTemplate do
get :using_hash_resource
end
end
def test_using_hash_resource
@request.accept = "application/xml"
get :using_hash_resource

View file

@ -0,0 +1 @@
alert("Hi");