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:
parent
35cdd256c0
commit
9c9ec2172e
4 changed files with 23 additions and 6 deletions
|
@ -30,6 +30,8 @@
|
||||||
|
|
||||||
*Rails 3.1.0 (unreleased)*
|
*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]
|
* 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]
|
* Make sure escape_js returns SafeBuffer string if it receives SafeBuffer string [Prem Sichanugrist]
|
||||||
|
|
|
@ -162,6 +162,11 @@ module ActionController #:nodoc:
|
||||||
navigation_behavior(e)
|
navigation_behavior(e)
|
||||||
end
|
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
|
# 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
|
# template, if the template is not available, we verify if the resource
|
||||||
# responds to :to_format and display it.
|
# responds to :to_format and display it.
|
||||||
|
|
|
@ -509,7 +509,7 @@ end
|
||||||
class RespondWithController < ActionController::Base
|
class RespondWithController < ActionController::Base
|
||||||
respond_to :html, :json
|
respond_to :html, :json
|
||||||
respond_to :xml, :except => :using_resource_with_block
|
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
|
def using_resource
|
||||||
respond_with(resource)
|
respond_with(resource)
|
||||||
|
@ -575,11 +575,6 @@ protected
|
||||||
def resource
|
def resource
|
||||||
Customer.new("david", request.delete? ? nil : 13)
|
Customer.new("david", request.delete? ? nil : 13)
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
class InheritedRespondWithController < RespondWithController
|
class InheritedRespondWithController < RespondWithController
|
||||||
|
@ -638,6 +633,20 @@ class RespondWithControllerTest < ActionController::TestCase
|
||||||
end
|
end
|
||||||
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
|
def test_using_hash_resource
|
||||||
@request.accept = "application/xml"
|
@request.accept = "application/xml"
|
||||||
get :using_hash_resource
|
get :using_hash_resource
|
||||||
|
|
1
actionpack/test/fixtures/respond_with/using_resource.js.erb
vendored
Normal file
1
actionpack/test/fixtures/respond_with/using_resource.js.erb
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
alert("Hi");
|
Loading…
Reference in a new issue