aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/lib/action_view/lookup_context.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2019-02-11 17:24:24 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2019-02-11 17:55:59 -0800
commit2b6d2d20374130da469ece24842ce3b681d3b788 (patch)
treeaffbde8be64402578fbef1f5a15950e418e7b4fc /actionview/lib/action_view/lookup_context.rb
parent9439a18bf76b3b7c759340abf0d7a5fb17fc82f7 (diff)
downloadrails-2b6d2d20374130da469ece24842ce3b681d3b788.tar.gz
rails-2b6d2d20374130da469ece24842ce3b681d3b788.tar.bz2
rails-2b6d2d20374130da469ece24842ce3b681d3b788.zip
Turn lookup context in to a stack, push and pop if formats change
This commit keeps a stack of lookup contexts on the ActionView::Base instance. If a format is passed to render, we instantiate a new lookup context and push it on the stack, that way any child calls to "render" will use the same format information as the parent. This also isolates "sibling" calls to render (multiple calls to render in the same template). Fixes #35222 #34138
Diffstat (limited to 'actionview/lib/action_view/lookup_context.rb')
-rw-r--r--actionview/lib/action_view/lookup_context.rb7
1 files changed, 7 insertions, 0 deletions
diff --git a/actionview/lib/action_view/lookup_context.rb b/actionview/lib/action_view/lookup_context.rb
index 61fe11cf45..125ab4dbe3 100644
--- a/actionview/lib/action_view/lookup_context.rb
+++ b/actionview/lib/action_view/lookup_context.rb
@@ -260,6 +260,13 @@ module ActionView
@digest_cache ||= DetailsKey.digest_cache(@details)
end
+ def with_prepended_formats(formats)
+ details = @details.dup
+ details[:formats] = formats
+
+ self.class.new(@view_paths, details, @prefixes)
+ end
+
def initialize_details(target, details)
registered_details.each do |k|
target[k] = details[k] || Accessors::DEFAULT_PROCS[k].call