diff options
author | Joshua Peek <josh@joshpeek.com> | 2008-10-28 11:06:08 -0500 |
---|---|---|
committer | Joshua Peek <josh@joshpeek.com> | 2008-10-28 11:06:08 -0500 |
commit | ac50ee0edfa0df90ae7a8dd09f4a41ecbd1c7a94 (patch) | |
tree | 5520adefae997928b844fb456fd106b3c08de6cd /actionpack/lib/action_view/renderable.rb | |
parent | 0f651aec4eb4630945d02571fe542414ef628c5c (diff) | |
download | rails-ac50ee0edfa0df90ae7a8dd09f4a41ecbd1c7a94.tar.gz rails-ac50ee0edfa0df90ae7a8dd09f4a41ecbd1c7a94.tar.bz2 rails-ac50ee0edfa0df90ae7a8dd09f4a41ecbd1c7a94.zip |
Track rendered templates in stack so the current template can always be accessed. Added ActionView::Base#template to access the template object.
Diffstat (limited to 'actionpack/lib/action_view/renderable.rb')
-rw-r--r-- | actionpack/lib/action_view/renderable.rb | 12 |
1 files changed, 9 insertions, 3 deletions
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) |