From ac50ee0edfa0df90ae7a8dd09f4a41ecbd1c7a94 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Tue, 28 Oct 2008 11:06:08 -0500 Subject: Track rendered templates in stack so the current template can always be accessed. Added ActionView::Base#template to access the template object. --- actionpack/lib/action_view/renderable.rb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'actionpack/lib/action_view/renderable.rb') diff --git a/actionpack/lib/action_view/renderable.rb b/actionpack/lib/action_view/renderable.rb index 0134bc988f..3d4dc6d522 100644 --- a/actionpack/lib/action_view/renderable.rb +++ b/actionpack/lib/action_view/renderable.rb @@ -25,13 +25,16 @@ module ActionView def render(view, local_assigns = {}) compile(local_assigns) - view.send(:_first_render=, self) unless view.send(:_first_render) - view.send(:_last_render=, self) + stack = view.instance_variable_get(:@_render_stack) + stack.push(self) + + # This is only used for TestResponse to set rendered_template + view.instance_variable_set(:@_first_render, self) unless view.instance_variable_get(:@_first_render) view.send(:_evaluate_assigns_and_ivars) view.send(:_set_controller_content_type, mime_type) if respond_to?(:mime_type) - view.send(method_name(local_assigns), local_assigns) do |*names| + result = view.send(method_name(local_assigns), local_assigns) do |*names| ivar = :@_proc_for_layout if view.instance_variable_defined?(ivar) and proc = view.instance_variable_get(ivar) view.capture(*names, &proc) @@ -39,6 +42,9 @@ module ActionView view.instance_variable_get(ivar) end end + + stack.pop + result end def method_name(local_assigns) -- cgit v1.2.3