aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2013-04-18 09:08:03 -0700
committerRafael Mendonça França <rafaelmfranca@gmail.com>2013-04-18 09:08:03 -0700
commit296830ed0f8732c6779dcdfed0f0e3d59947e47c (patch)
tree900114e542088830f1eca2d6d3362823e82efc42 /actionpack
parentdba6a078ee22264bd2d305fd30a7b9ba8d9af983 (diff)
parent14c196e5a3f78ea4672b691a09ba60524b31fb73 (diff)
downloadrails-296830ed0f8732c6779dcdfed0f0e3d59947e47c.tar.gz
rails-296830ed0f8732c6779dcdfed0f0e3d59947e47c.tar.bz2
rails-296830ed0f8732c6779dcdfed0f0e3d59947e47c.zip
Merge pull request #10262 from printercu/patch-3
Avoid leak into controller's action_methods
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/abstract_controller/layouts.rb1
-rw-r--r--actionpack/test/abstract/layouts_test.rb6
2 files changed, 7 insertions, 0 deletions
diff --git a/actionpack/lib/abstract_controller/layouts.rb b/actionpack/lib/abstract_controller/layouts.rb
index bac994496e..8e7bdf620e 100644
--- a/actionpack/lib/abstract_controller/layouts.rb
+++ b/actionpack/lib/abstract_controller/layouts.rb
@@ -309,6 +309,7 @@ module AbstractController
RUBY
when Proc
define_method :_layout_from_proc, &_layout
+ protected :_layout_from_proc
<<-RUBY
result = _layout_from_proc(#{_layout.arity == 0 ? '' : 'self'})
return #{default_behavior} if result.nil?
diff --git a/actionpack/test/abstract/layouts_test.rb b/actionpack/test/abstract/layouts_test.rb
index 92baad4523..4a05c00f8b 100644
--- a/actionpack/test/abstract/layouts_test.rb
+++ b/actionpack/test/abstract/layouts_test.rb
@@ -8,6 +8,8 @@ module AbstractControllerTests
include AbstractController::Rendering
include AbstractController::Layouts
+ abstract!
+
self.view_paths = [ActionView::FixtureResolver.new(
"layouts/hello.erb" => "With String <%= yield %>",
"layouts/hello_override.erb" => "With Override <%= yield %>",
@@ -251,6 +253,10 @@ module AbstractControllerTests
assert_equal "Hello nil!", controller.response_body
end
+ test "when layout is specified as a proc, do not leak any methods into controller's action_methods" do
+ assert_equal Set.new(['index']), WithProc.action_methods
+ end
+
test "when layout is specified as a proc, call it and use the layout returned" do
controller = WithProc.new
controller.process(:index)