mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Make ActionController's render honor the :locals option when rendering a :file. Closes #1665.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3157 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
130c493a4f
commit
bea737eb5a
5 changed files with 42 additions and 3 deletions
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* Make ActionController's render honor the :locals option when rendering a :file. #1665. [Emanuel Borsboom, Marcel Molina Jr.]
|
||||
|
||||
* Allow assert_tag(:conditions) to match the empty string when a tag has no children. Closes #2959. [Jamis Buck]
|
||||
|
||||
* Update html-scanner to handle CDATA sections better. Closes #2970. [Jamis Buck]
|
||||
|
|
|
@ -459,6 +459,10 @@ module ActionController #:nodoc:
|
|||
self.class.controller_name
|
||||
end
|
||||
|
||||
def session_enabled?
|
||||
request.session_options[:disabled] != false
|
||||
end
|
||||
|
||||
protected
|
||||
# Renders the content that will be returned to the browser as the response body.
|
||||
#
|
||||
|
@ -596,7 +600,7 @@ module ActionController #:nodoc:
|
|||
|
||||
else
|
||||
if file = options[:file]
|
||||
render_file(file, options[:status], options[:use_full_path])
|
||||
render_file(file, options[:status], options[:use_full_path], options[:locals] || {})
|
||||
|
||||
elsif template = options[:template]
|
||||
render_file(template, options[:status], true)
|
||||
|
@ -645,11 +649,11 @@ module ActionController #:nodoc:
|
|||
end
|
||||
end
|
||||
|
||||
def render_file(template_path, status = nil, use_full_path = false)
|
||||
def render_file(template_path, status = nil, use_full_path = false, locals = {})
|
||||
add_variables_to_assigns
|
||||
assert_existance_of_template_file(template_path) if use_full_path
|
||||
logger.info("Rendering #{template_path}" + (status ? " (#{status})" : '')) if logger
|
||||
render_text(@template.render_file(template_path, use_full_path), status)
|
||||
render_text(@template.render_file(template_path, use_full_path, locals), status)
|
||||
end
|
||||
|
||||
def render_template(template, status = nil, type = :rhtml, local_assigns = {})
|
||||
|
|
|
@ -43,6 +43,22 @@ class NewRenderTestController < ActionController::Base
|
|||
def render_custom_code
|
||||
render :text => "hello world", :status => "404 Moved"
|
||||
end
|
||||
|
||||
def render_file_with_instance_variables
|
||||
@secret = 'in the sauce'
|
||||
path = File.join(File.dirname(__FILE__), '../fixtures/test/render_file_with_ivar.rhtml')
|
||||
render :file => path
|
||||
end
|
||||
|
||||
def render_file_with_locals
|
||||
path = File.join(File.dirname(__FILE__), '../fixtures/test/render_file_with_locals.rhtml')
|
||||
render :file => path, :locals => {:secret => 'in the sauce'}
|
||||
end
|
||||
|
||||
def render_file_not_using_full_path
|
||||
@secret = 'in the sauce'
|
||||
render :file => 'test/render_file_with_ivar', :use_full_path => true
|
||||
end
|
||||
|
||||
def render_xml_hello
|
||||
@name = "David"
|
||||
|
@ -257,6 +273,21 @@ class NewRenderTest < Test::Unit::TestCase
|
|||
assert_response :missing
|
||||
end
|
||||
|
||||
def test_render_file_with_instance_variables
|
||||
get :render_file_with_instance_variables
|
||||
assert_equal "The secret is in the sauce\n", @response.body
|
||||
end
|
||||
|
||||
def test_render_file_not_using_full_path
|
||||
get :render_file_not_using_full_path
|
||||
assert_equal "The secret is in the sauce\n", @response.body
|
||||
end
|
||||
|
||||
def test_render_file_with_locals
|
||||
get :render_file_with_locals
|
||||
assert_equal "The secret is in the sauce\n", @response.body
|
||||
end
|
||||
|
||||
def test_attempt_to_access_object_method
|
||||
assert_raises(ActionController::UnknownAction, "No action responded to [clone]") { get :clone }
|
||||
end
|
||||
|
|
1
actionpack/test/fixtures/test/render_file_with_ivar.rhtml
vendored
Normal file
1
actionpack/test/fixtures/test/render_file_with_ivar.rhtml
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
The secret is <%= @secret %>
|
1
actionpack/test/fixtures/test/render_file_with_locals.rhtml
vendored
Normal file
1
actionpack/test/fixtures/test/render_file_with_locals.rhtml
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
The secret is <%= secret %>
|
Loading…
Reference in a new issue