Added Base#render_to_string to parse a template and get the result back as a string #479
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@766 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
a8f36e88dd
commit
41ea6963a3
|
@ -1,5 +1,7 @@
|
||||||
*SVN*
|
*SVN*
|
||||||
|
|
||||||
|
* Added Base#render_to_string to parse a template and get the result back as a string #479
|
||||||
|
|
||||||
* Fixed that send_file/data can work even if render* has been called before in action processing to render the content of a file to be send for example #601
|
* Fixed that send_file/data can work even if render* has been called before in action processing to render the content of a file to be send for example #601
|
||||||
|
|
||||||
* Added FormOptionsHelper#time_zone_select and FormOptionsHelper#time_zone_options_for_select to work with the new value object TimeZone in Active Record #688 [Jamis Buck]
|
* Added FormOptionsHelper#time_zone_select and FormOptionsHelper#time_zone_options_for_select to work with the new value object TimeZone in Active Record #688 [Jamis Buck]
|
||||||
|
|
|
@ -341,10 +341,8 @@ module ActionController #:nodoc:
|
||||||
# * <tt>:host</tt> -- overrides the default (current) host if provided
|
# * <tt>:host</tt> -- overrides the default (current) host if provided
|
||||||
# * <tt>:protocol</tt> -- overrides the default (current) protocol if provided
|
# * <tt>:protocol</tt> -- overrides the default (current) protocol if provided
|
||||||
#
|
#
|
||||||
# All other keys are used to generate an appropriate path for the new URL. This is handled by the Routes mechanism,
|
# The URL is generated from the remaining keys in the hash. A URL contains two key parts: the <base> and a query string.
|
||||||
# and the generated path is wildly configurable. The options that Routes does not use are
|
# Routes composes a query string as the key/value pairs not included in the <base>.
|
||||||
# are encoded into a typical query string. Once (and if) the link is followed, all provided options are made
|
|
||||||
# available to the controller in <tt>@params</tt>.
|
|
||||||
#
|
#
|
||||||
# The default Routes setup supports a typical Rails path of "controller/action/id" where action and id are optional, with
|
# The default Routes setup supports a typical Rails path of "controller/action/id" where action and id are optional, with
|
||||||
# action defaulting to 'index' when not given. Here are some typical url_for statements and their corresponding URLs:
|
# action defaulting to 'index' when not given. Here are some typical url_for statements and their corresponding URLs:
|
||||||
|
@ -478,6 +476,12 @@ module ActionController #:nodoc:
|
||||||
render_text "", status
|
render_text "", status
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns the result of the render as a string.
|
||||||
|
def render_to_string(template_name = default_template_name)
|
||||||
|
add_variables_to_assigns
|
||||||
|
@template.render_file(template_name)
|
||||||
|
end
|
||||||
|
|
||||||
# Sends the file by streaming it 4096 bytes at a time. This way the
|
# Sends the file by streaming it 4096 bytes at a time. This way the
|
||||||
# whole file doesn't need to be read into memory at once. This makes
|
# whole file doesn't need to be read into memory at once. This makes
|
||||||
# it feasible to send even large files.
|
# it feasible to send even large files.
|
||||||
|
|
|
@ -1,44 +1,36 @@
|
||||||
require File.dirname(__FILE__) + '/../abstract_unit'
|
require File.dirname(__FILE__) + '/../abstract_unit'
|
||||||
|
|
||||||
class RedirectTest < Test::Unit::TestCase
|
class RedirectController < ActionController::Base
|
||||||
class RedirectController < ActionController::Base
|
def simple_redirect
|
||||||
def simple_redirect
|
redirect_to :action => "hello_world"
|
||||||
redirect_to :action => "hello_world"
|
|
||||||
end
|
|
||||||
|
|
||||||
def method_redirect
|
|
||||||
redirect_to :dashbord_url, 1, "hello"
|
|
||||||
end
|
|
||||||
|
|
||||||
def rescue_errors(e) raise e end
|
|
||||||
|
|
||||||
protected
|
|
||||||
def dashbord_url(id, message)
|
|
||||||
url_for :action => "dashboard", :params => { "id" => id, "message" => message }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def method_redirect
|
||||||
|
redirect_to :dashbord_url, 1, "hello"
|
||||||
|
end
|
||||||
|
|
||||||
|
def rescue_errors(e) raise e end
|
||||||
|
|
||||||
|
protected
|
||||||
|
def dashbord_url(id, message)
|
||||||
|
url_for :action => "dashboard", :params => { "id" => id, "message" => message }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class RedirectTest < Test::Unit::TestCase
|
||||||
def setup
|
def setup
|
||||||
@request = ActionController::TestRequest.new
|
@controller = RedirectController.new
|
||||||
@response = ActionController::TestResponse.new
|
@request = ActionController::TestRequest.new
|
||||||
|
@response = ActionController::TestResponse.new
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_simple_redirect
|
def test_simple_redirect
|
||||||
@request.path = "/redirect/simple_redirect"
|
get :simple_redirect
|
||||||
@request.action = "simple_redirect"
|
assert_redirect_url "http://test.host/redirect/hello_world"
|
||||||
response = process_request
|
|
||||||
assert_equal "http://test.host/redirect/hello_world", response.headers["location"]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_redirect_with_method_reference_and_parameters
|
def test_redirect_with_method_reference_and_parameters
|
||||||
@request.path = "/redirect/method_redirect"
|
get :method_redirect
|
||||||
@request.action = "method_redirect"
|
assert_redirect_url "http://test.host/redirect/dashboard?message=hello&id=1"
|
||||||
response = process_request
|
|
||||||
assert_equal "http://test.host/redirect/dashboard?message=hello&id=1", response.headers["location"]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
def process_request
|
|
||||||
RedirectController.process(@request, @response)
|
|
||||||
end
|
|
||||||
end
|
end
|
|
@ -59,6 +59,11 @@ class TestController < ActionController::Base
|
||||||
render_action "list"
|
render_action "list"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def hello_in_a_string
|
||||||
|
@customers = [ Customer.new("david"), Customer.new("mary") ]
|
||||||
|
render_text "How's there? #{render_to_string("test/list")}"
|
||||||
|
end
|
||||||
|
|
||||||
def rescue_action(e) raise end
|
def rescue_action(e) raise end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -71,6 +76,7 @@ class TestController < ActionController::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
TestController.template_root = File.dirname(__FILE__) + "/../fixtures/"
|
TestController.template_root = File.dirname(__FILE__) + "/../fixtures/"
|
||||||
|
Fun::GamesController.template_root = File.dirname(__FILE__) + "/../fixtures/"
|
||||||
|
|
||||||
class TestLayoutController < ActionController::Base
|
class TestLayoutController < ActionController::Base
|
||||||
layout "layouts/standard"
|
layout "layouts/standard"
|
||||||
|
@ -175,6 +181,11 @@ class RenderTest < Test::Unit::TestCase
|
||||||
assert_equal "Hello: davidHello: mary", process_request.body
|
assert_equal "Hello: davidHello: mary", process_request.body
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_render_to_string
|
||||||
|
@request.action = "hello_in_a_string"
|
||||||
|
assert_equal "How's there? Hello: davidHello: mary", process_request.body
|
||||||
|
end
|
||||||
|
|
||||||
def test_nested_rendering
|
def test_nested_rendering
|
||||||
@request.action = "hello_world"
|
@request.action = "hello_world"
|
||||||
assert_equal "Living in a nested world", Fun::GamesController.process(@request, @response).body
|
assert_equal "Living in a nested world", Fun::GamesController.process(@request, @response).body
|
||||||
|
|
Loading…
Reference in New Issue