From bbc1351344dd47e88a0251ca9a0f6301301b1202 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Wed, 21 Jun 2006 00:31:43 +0000 Subject: Determine the correct template_root for deeply nested components. Closes #2841. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4474 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 2 ++ actionpack/lib/action_controller/components.rb | 4 ++-- actionpack/test/controller/components_test.rb | 21 ++++++++++++++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 6ff02ea01c..9cb766e183 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Determine the correct template_root for deeply nested components. #2841 [s.brink@web.de] + * Fix that routes with *path segments in the recall can generate URLs. [Rick] * Fix strip_links so that it doesn't hang on multiline tags [Jamis Buck] diff --git a/actionpack/lib/action_controller/components.rb b/actionpack/lib/action_controller/components.rb index c746928697..7f7cb361f8 100644 --- a/actionpack/lib/action_controller/components.rb +++ b/actionpack/lib/action_controller/components.rb @@ -75,8 +75,8 @@ module ActionController #:nodoc: # will also use /code/weblog/components as template root # and find templates in /code/weblog/components/admin/parties/users/ def uses_component_template_root - path_of_calling_controller = File.dirname(caller[0].split(/:\d+:/).first) - path_of_controller_root = path_of_calling_controller.sub(/#{controller_path.split("/")[0..-2]}$/, "") # " (for ruby-mode) + path_of_calling_controller = File.dirname(caller[0].split(/:\d+:/, 2).first) + path_of_controller_root = path_of_calling_controller.sub(/#{Regexp.escape(File.dirname(controller_path))}$/, "") self.template_root = path_of_controller_root end diff --git a/actionpack/test/controller/components_test.rb b/actionpack/test/controller/components_test.rb index d10f7102c2..075bc98a28 100644 --- a/actionpack/test/controller/components_test.rb +++ b/actionpack/test/controller/components_test.rb @@ -126,4 +126,23 @@ class ComponentsTest < Test::Unit::TestCase assert_equal "Lady of the House, speaking", @response.body end -end \ No newline at end of file +end + +module A + module B + module C + class NestedController < ActionController::Base + # Stub for uses_component_template_root + def self.caller + ['./test/fixtures/a/b/c/nested_controller.rb'] + end + end + end + end +end + +class UsesComponentTemplateRootTest < Test::Unit::TestCase + def test_uses_component_template_root + assert_equal './test/fixtures/', A::B::C::NestedController.uses_component_template_root + end +end -- cgit v1.2.3