diff options
-rw-r--r-- | actionpack/lib/action_view/base.rb | 9 | ||||
-rw-r--r-- | actionpack/test/controller/new_render_test.rb | 22 | ||||
-rw-r--r-- | actionpack/test/fixtures/test/dot.directory/render_file_with_ivar.rhtml | 1 |
3 files changed, 29 insertions, 3 deletions
diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb index 94e7a47232..b118ee1042 100644 --- a/actionpack/lib/action_view/base.rb +++ b/actionpack/lib/action_view/base.rb @@ -221,7 +221,7 @@ module ActionView #:nodoc: @first_render = template_path if @first_render.nil? if use_full_path - template_path_without_extension, template_extension = template_path.split('.') + template_path_without_extension, template_extension = path_and_extension(template_path) if template_extension template_file_name = full_template_path(template_path_without_extension, template_extension) @@ -335,7 +335,7 @@ module ActionView #:nodoc: end def file_exists?(template_path)#:nodoc: - template_file_name, template_file_extension = template_path.split(".") + template_file_name, template_file_extension = path_and_extension(template_path) if template_file_extension template_exists?(template_file_name, template_file_extension) @@ -361,6 +361,11 @@ module ActionView #:nodoc: @@method_names.has_key?(file_path) || FileTest.exists?(file_path) end + def path_and_extension(template_path) + template_path_without_extension = template_path.sub(/\.(\w+)$/, '') + [ template_path_without_extension, $1 ] + end + # This method reads a template file. def read_template_file(template_path, extension) File.read(template_path) diff --git a/actionpack/test/controller/new_render_test.rb b/actionpack/test/controller/new_render_test.rb index 961269da59..0722bb9fd6 100644 --- a/actionpack/test/controller/new_render_test.rb +++ b/actionpack/test/controller/new_render_test.rb @@ -73,7 +73,17 @@ class NewRenderTestController < ActionController::Base @secret = 'in the sauce' render :file => 'test/render_file_with_ivar', :use_full_path => true end + + def render_file_not_using_full_path_with_relative_path + @secret = 'in the sauce' + render :file => 'test/../test/render_file_with_ivar', :use_full_path => true + end + def render_file_not_using_full_path_with_dot_in_path + @secret = 'in the sauce' + render :file => 'test/dot.directory/render_file_with_ivar', :use_full_path => true + end + def render_xml_hello @name = "David" render :template => "test/hello" @@ -353,6 +363,16 @@ class NewRenderTest < Test::Unit::TestCase assert_equal "The secret is in the sauce\n", @response.body end + def test_render_file_not_using_full_path_with_relative_path + get :render_file_not_using_full_path_with_relative_path + assert_equal "The secret is in the sauce\n", @response.body + end + + def test_render_file_not_using_full_path_with_dot_in_path + get :render_file_not_using_full_path_with_dot_in_path + assert_equal "The secret is in the sauce\n", @response.body + end + def test_render_file_with_locals get :render_file_with_locals assert_equal "The secret is in the sauce\n", @response.body @@ -577,4 +597,4 @@ EOS get :hello_world_from_rxml_using_action assert_equal "<html>\n <p>Hello</p>\n</html>\n", @response.body end -end
\ No newline at end of file +end diff --git a/actionpack/test/fixtures/test/dot.directory/render_file_with_ivar.rhtml b/actionpack/test/fixtures/test/dot.directory/render_file_with_ivar.rhtml new file mode 100644 index 0000000000..8b8a449236 --- /dev/null +++ b/actionpack/test/fixtures/test/dot.directory/render_file_with_ivar.rhtml @@ -0,0 +1 @@ +The secret is <%= @secret %> |