diff options
author | Rick Olson <technoweenie@gmail.com> | 2007-11-26 03:59:23 +0000 |
---|---|---|
committer | Rick Olson <technoweenie@gmail.com> | 2007-11-26 03:59:23 +0000 |
commit | 87e506da535118d77b58484a4e6e2d1cd9e13b53 (patch) | |
tree | fc80941c104799d584838ba8cc3b7954171d0e72 /actionpack | |
parent | 1af084ecda66a8e1b4eb3a51a07ebca85bf2e419 (diff) | |
download | rails-87e506da535118d77b58484a4e6e2d1cd9e13b53.tar.gz rails-87e506da535118d77b58484a4e6e2d1cd9e13b53.tar.bz2 rails-87e506da535118d77b58484a4e6e2d1cd9e13b53.zip |
Add #prepend_view_path and #append_view_path instance methods on ActionController::Base for consistency with the class methods. [rick]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8214 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/CHANGELOG | 2 | ||||
-rwxr-xr-x | actionpack/lib/action_controller/base.rb | 25 | ||||
-rw-r--r-- | actionpack/lib/action_view/base.rb | 22 | ||||
-rw-r--r-- | actionpack/test/controller/view_paths_test.rb | 28 |
4 files changed, 71 insertions, 6 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 26b533b13c..53a8b17908 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Add #prepend_view_path and #append_view_path instance methods on ActionController::Base for consistency with the class methods. [rick] + * Refactor sanitizer helpers into HTML classes and make it easy to swap them out with custom implementations. Closes #10129. [rick] * Add deprecation for old subtemplate syntax for ActionMailer templates, use render :partial [rick] diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb index 5249fd035a..9b77f0fb55 100755 --- a/actionpack/lib/action_controller/base.rb +++ b/actionpack/lib/action_controller/base.rb @@ -430,7 +430,7 @@ module ActionController #:nodoc: # Adds a view_path to the front of the view_paths array. # If the current class has no view paths, copy them from - # the superclass + # the superclass. This change will be visible for all future requests. # # ArticleController.prepend_view_path("views/default") # ArticleController.prepend_view_path(["views/default", "views/custom"]) @@ -442,7 +442,7 @@ module ActionController #:nodoc: # Adds a view_path to the end of the view_paths array. # If the current class has no view paths, copy them from - # the superclass + # the superclass. This change will be visible for all future requests. # # ArticleController.append_view_path("views/default") # ArticleController.append_view_path(["views/default", "views/custom"]) @@ -636,7 +636,6 @@ module ActionController #:nodoc: request.session_options && request.session_options[:disabled] != false end - self.view_paths = [] # View load paths for controller. @@ -647,7 +646,27 @@ module ActionController #:nodoc: def view_paths=(value) (@template || self.class).view_paths = value end + + # Adds a view_path to the front of the view_paths array. + # This change affects the current request only. + # + # self.prepend_view_path("views/default") + # self.prepend_view_path(["views/default", "views/custom"]) + # + def prepend_view_path(path) + (@template || self.class).prepend_view_path(path) + end + # Adds a view_path to the end of the view_paths array. + # This change affects the current request only. + # + # self.append_view_path("views/default") + # self.append_view_path(["views/default", "views/custom"]) + # + def append_view_path(path) + (@template || self.class).append_view_path(path) + end + protected # Renders the content that will be returned to the browser as the response body. # diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb index 9901f81d56..a12574a09f 100644 --- a/actionpack/lib/action_view/base.rb +++ b/actionpack/lib/action_view/base.rb @@ -265,7 +265,7 @@ module ActionView #:nodoc: end def initialize(view_paths = [], assigns_for_first_render = {}, controller = nil)#:nodoc: - @view_paths = view_paths.respond_to?(:find) ? view_paths : [*view_paths].compact + @view_paths = view_paths.respond_to?(:find) ? view_paths.dup : [*view_paths].compact @assigns = assigns_for_first_render @assigns_added = nil @controller = controller @@ -472,6 +472,26 @@ If you are rendering a subtemplate, you must now use controller-like partial syn TEMPLATE_HANDLER_PREFERENCES[template_format] || DEFAULT_TEMPLATE_HANDLER_PREFERENCE end + # Adds a view_path to the front of the view_paths array. + # This change affects the current request only. + # + # @template.prepend_view_path("views/default") + # @template.prepend_view_path(["views/default", "views/custom"]) + # + def prepend_view_path(path) + @view_paths.unshift(*path) + end + + # Adds a view_path to the end of the view_paths array. + # This change affects the current request only. + # + # @template.append_view_path("views/default") + # @template.append_view_path(["views/default", "views/custom"]) + # + def append_view_path(path) + @view_paths.push(*path) + end + private def find_full_template_path(template_path, extension) file_name = "#{template_path}.#{extension}" diff --git a/actionpack/test/controller/view_paths_test.rb b/actionpack/test/controller/view_paths_test.rb index a29247ad44..e29e2b9f3c 100644 --- a/actionpack/test/controller/view_paths_test.rb +++ b/actionpack/test/controller/view_paths_test.rb @@ -47,7 +47,7 @@ class ViewLoadPathsTest < Test::Unit::TestCase assert_equal [ LOAD_PATH_ROOT ], @controller.view_paths end - def test_template_appends_path_correctly + def test_controller_appends_view_path_correctly TestController.append_view_path 'foo' assert_equal [LOAD_PATH_ROOT, 'foo'], @controller.view_paths @@ -55,7 +55,7 @@ class ViewLoadPathsTest < Test::Unit::TestCase assert_equal [LOAD_PATH_ROOT, 'foo', 'bar', 'baz'], @controller.view_paths end - def test_template_prepends_path_correctly + def test_controller_prepends_view_path_correctly TestController.prepend_view_path 'baz' assert_equal ['baz', LOAD_PATH_ROOT], @controller.view_paths @@ -63,6 +63,30 @@ class ViewLoadPathsTest < Test::Unit::TestCase assert_equal ['foo', 'bar', 'baz', LOAD_PATH_ROOT], @controller.view_paths end + def test_template_appends_view_path_correctly + @controller.instance_variable_set :@template, ActionView::Base.new(TestController.view_paths, {}, @controller) + class_view_paths = TestController.view_paths + + @controller.append_view_path 'foo' + assert_equal [LOAD_PATH_ROOT, 'foo'], @controller.view_paths + + @controller.append_view_path(%w(bar baz)) + assert_equal [LOAD_PATH_ROOT, 'foo', 'bar', 'baz'], @controller.view_paths + assert_equal class_view_paths, TestController.view_paths + end + + def test_template_prepends_view_path_correctly + @controller.instance_variable_set :@template, ActionView::Base.new(TestController.view_paths, {}, @controller) + class_view_paths = TestController.view_paths + + @controller.prepend_view_path 'baz' + assert_equal ['baz', LOAD_PATH_ROOT], @controller.view_paths + + @controller.prepend_view_path(%w(foo bar)) + assert_equal ['foo', 'bar', 'baz', LOAD_PATH_ROOT], @controller.view_paths + assert_equal class_view_paths, TestController.view_paths + end + def test_view_paths get :hello_world assert_response :success |