Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Make ActionController's render honor the :locals option when renderin…

…g a :file. Closes #1665.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3157 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit bea737eb5a5f51ee7fbc2e60d870cee5936bdfb0 1 parent 130c493
Sam Stephenson sstephenson authored
2  actionpack/CHANGELOG
View
@@ -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]
10 actionpack/lib/action_controller/base.rb
View
@@ -459,6 +459,10 @@ def controller_name
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 @@ def render(options = nil, deprecated_status = nil) #:doc:
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 @@ def render_action(action_name, status = nil, with_layout = true)
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 = {})
31 actionpack/test/controller/new_render_test.rb
View
@@ -43,6 +43,22 @@ def render_text_hello_world_with_layout
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 @@ def test_do_with_render_custom_code
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
View
@@ -0,0 +1 @@
+The secret is <%= @secret %>
1  actionpack/test/fixtures/test/render_file_with_locals.rhtml
View
@@ -0,0 +1 @@
+The secret is <%= secret %>
Please sign in to comment.
Something went wrong with that request. Please try again.