From d2adec438e2f70ea1228cefb5d592752cf720ac2 Mon Sep 17 00:00:00 2001 From: Nicholas Seckar Date: Mon, 30 Jan 2006 04:49:17 +0000 Subject: [PATCH] Ensure assigns are copied to the template when using render :update. Closes #3620. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3497 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 2 ++ actionpack/lib/action_controller/base.rb | 3 +++ actionpack/test/controller/new_render_test.rb | 19 ++++++++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 3f85c38106..792480750c 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Ensure that the instance variables are copied to the template when performing render :update. [Nicholas Seckar] + * Add the ability to call JavaScriptGenerator methods from helpers called in update blocks. [Sam Stephenson] Example: module ApplicationHelper def update_time diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb index 43f948e73d..862d2e5efd 100755 --- a/actionpack/lib/action_controller/base.rb +++ b/actionpack/lib/action_controller/base.rb @@ -642,6 +642,9 @@ def render(options = nil, deprecated_status = nil, &block) #:doc: end elsif options[:update] + add_variables_to_assigns + @template.send :evaluate_assigns + generator = ActionView::Helpers::PrototypeHelper::JavaScriptGenerator.new(@template, &block) render_javascript(generator.to_s) diff --git a/actionpack/test/controller/new_render_test.rb b/actionpack/test/controller/new_render_test.rb index 0208912ece..997a49091d 100644 --- a/actionpack/test/controller/new_render_test.rb +++ b/actionpack/test/controller/new_render_test.rb @@ -194,6 +194,15 @@ def update_page page.visual_effect :highlight, 'balance' end end + + def update_page_with_instance_variables + @money = '$37,000,000.00' + @div_id = 'balance' + render :update do |page| + page.replace_html @div_id, @money + page.visual_effect :highlight, @div_id + end + end def action_talk_to_layout # Action template sets variable that's picked up by layout @@ -223,7 +232,7 @@ def determine_layout "render_with_explicit_template", "render_js_with_explicit_template", "render_js_with_explicit_action_template", - "delete_with_js", "update_page" + "delete_with_js", "update_page", "update_page_with_instance_variables" "layouts/standard" when "builder_layout_test" @@ -494,6 +503,14 @@ def test_update_page assert_equal 2, @response.body.split($/).length end + def test_update_page_with_instance_variables + get :update_page_with_instance_variables + assert_template nil + assert_equal 'text/javascript', @response.headers['Content-Type'] + assert_match /balance/, @response.body + assert_match /\$37/, @response.body + end + def test_yield_content_for get :yield_content_for assert_equal "Putting stuff in the title!\n\nGreat stuff!\n", @response.body