mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Always downstream given options in :json, :xml and :js renderers and add tests for it.
This commit is contained in:
parent
4163ccec23
commit
81fb742488
3 changed files with 37 additions and 9 deletions
|
@ -79,12 +79,12 @@ module ActionController
|
|||
|
||||
add :js do |js, options|
|
||||
self.content_type ||= Mime::JS
|
||||
self.response_body = js.respond_to?(:to_js) ? js.to_js : js
|
||||
self.response_body = js.respond_to?(:to_js) ? js.to_js(options) : js
|
||||
end
|
||||
|
||||
add :xml do |xml, options|
|
||||
self.content_type ||= Mime::XML
|
||||
self.response_body = xml.respond_to?(:to_xml) ? xml.to_xml : xml
|
||||
self.response_body = xml.respond_to?(:to_xml) ? xml.to_xml(options) : xml
|
||||
end
|
||||
|
||||
add :update do |proc, options|
|
||||
|
|
|
@ -3,6 +3,14 @@ require 'controller/fake_models'
|
|||
require 'pathname'
|
||||
|
||||
class RenderJsonTest < ActionController::TestCase
|
||||
class JsonRenderable
|
||||
def as_json(options={})
|
||||
hash = { :a => :b, :c => :d, :e => :f }
|
||||
hash.except!(*options[:except]) if options[:except]
|
||||
hash
|
||||
end
|
||||
end
|
||||
|
||||
class TestController < ActionController::Base
|
||||
protect_from_forgery
|
||||
|
||||
|
@ -37,6 +45,10 @@ class RenderJsonTest < ActionController::TestCase
|
|||
def render_json_with_render_to_string
|
||||
render :json => {:hello => render_to_string(:partial => 'partial')}
|
||||
end
|
||||
|
||||
def render_json_with_extra_options
|
||||
render :json => JsonRenderable.new, :except => [:c, :e]
|
||||
end
|
||||
end
|
||||
|
||||
tests TestController
|
||||
|
@ -91,4 +103,10 @@ class RenderJsonTest < ActionController::TestCase
|
|||
assert_equal '{"hello":"partial html"}', @response.body
|
||||
assert_equal 'application/json', @response.content_type
|
||||
end
|
||||
|
||||
def test_render_json_forwards_extra_options
|
||||
get :render_json_with_extra_options
|
||||
assert_equal '{"a":"b"}', @response.body
|
||||
assert_equal 'application/json', @response.content_type
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,6 +3,13 @@ require 'controller/fake_models'
|
|||
require 'pathname'
|
||||
|
||||
class RenderXmlTest < ActionController::TestCase
|
||||
class XmlRenderable
|
||||
def to_xml(options)
|
||||
options[:root] ||= "i-am-xml"
|
||||
"<#{options[:root]}/>"
|
||||
end
|
||||
end
|
||||
|
||||
class TestController < ActionController::Base
|
||||
protect_from_forgery
|
||||
|
||||
|
@ -20,13 +27,7 @@ class RenderXmlTest < ActionController::TestCase
|
|||
end
|
||||
|
||||
def render_with_to_xml
|
||||
to_xmlable = Class.new do
|
||||
def to_xml
|
||||
"<i-am-xml/>"
|
||||
end
|
||||
end.new
|
||||
|
||||
render :xml => to_xmlable
|
||||
render :xml => XmlRenderable.new
|
||||
end
|
||||
|
||||
def formatted_xml_erb
|
||||
|
@ -35,6 +36,10 @@ class RenderXmlTest < ActionController::TestCase
|
|||
def render_xml_with_custom_content_type
|
||||
render :xml => "<blah/>", :content_type => "application/atomsvc+xml"
|
||||
end
|
||||
|
||||
def render_xml_with_custom_options
|
||||
render :xml => XmlRenderable.new, :root => "i-am-THE-xml"
|
||||
end
|
||||
end
|
||||
|
||||
tests TestController
|
||||
|
@ -58,6 +63,11 @@ class RenderXmlTest < ActionController::TestCase
|
|||
assert_equal "<i-am-xml/>", @response.body
|
||||
end
|
||||
|
||||
def test_rendering_xml_should_call_to_xml_with_extra_options
|
||||
get :render_with_to_xml
|
||||
assert_equal "<i-am-xml/>", @response.body
|
||||
end
|
||||
|
||||
def test_rendering_with_object_location_should_set_header_with_url_for
|
||||
with_routing do |set|
|
||||
set.draw do |map|
|
||||
|
|
Loading…
Reference in a new issue