aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/renderable.rb
diff options
context:
space:
mode:
authorJoshua Peek <josh@joshpeek.com>2008-10-28 11:06:08 -0500
committerJoshua Peek <josh@joshpeek.com>2008-10-28 11:06:08 -0500
commitac50ee0edfa0df90ae7a8dd09f4a41ecbd1c7a94 (patch)
tree5520adefae997928b844fb456fd106b3c08de6cd /actionpack/lib/action_view/renderable.rb
parent0f651aec4eb4630945d02571fe542414ef628c5c (diff)
downloadrails-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.rb12
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)