aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRick Olson <technoweenie@gmail.com>2007-11-26 03:59:23 +0000
committerRick Olson <technoweenie@gmail.com>2007-11-26 03:59:23 +0000
commit87e506da535118d77b58484a4e6e2d1cd9e13b53 (patch)
treefc80941c104799d584838ba8cc3b7954171d0e72
parent1af084ecda66a8e1b4eb3a51a07ebca85bf2e419 (diff)
downloadrails-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
-rw-r--r--actionpack/CHANGELOG2
-rwxr-xr-xactionpack/lib/action_controller/base.rb25
-rw-r--r--actionpack/lib/action_view/base.rb22
-rw-r--r--actionpack/test/controller/view_paths_test.rb28
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