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
This commit is contained in:
Rick Olson 2007-11-26 03:59:23 +00:00
parent 1af084ecda
commit 87e506da53
4 changed files with 71 additions and 6 deletions

View File

@ -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]

View File

@ -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.
#

View File

@ -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}"

View File

@ -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