aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/abstract_controller/view_paths.rb
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-03-08 16:50:10 +0100
committerJosé Valim <jose.valim@gmail.com>2010-03-08 16:50:10 +0100
commit67a6725bf934452219cc054c8cd0535148d4fcd4 (patch)
tree572402a106c959804cbf00646674e45553f06a97 /actionpack/lib/abstract_controller/view_paths.rb
parent68cda695da27f57cae682d160a13dab4dacb1ef8 (diff)
downloadrails-67a6725bf934452219cc054c8cd0535148d4fcd4.tar.gz
rails-67a6725bf934452219cc054c8cd0535148d4fcd4.tar.bz2
rails-67a6725bf934452219cc054c8cd0535148d4fcd4.zip
Move ViewPaths module to its own file.
Diffstat (limited to 'actionpack/lib/abstract_controller/view_paths.rb')
-rw-r--r--actionpack/lib/abstract_controller/view_paths.rb69
1 files changed, 69 insertions, 0 deletions
diff --git a/actionpack/lib/abstract_controller/view_paths.rb b/actionpack/lib/abstract_controller/view_paths.rb
new file mode 100644
index 0000000000..ec8f31cdfe
--- /dev/null
+++ b/actionpack/lib/abstract_controller/view_paths.rb
@@ -0,0 +1,69 @@
+module AbstractController
+ module ViewPaths
+ extend ActiveSupport::Concern
+
+ included do
+ class_attribute :_view_paths
+ self._view_paths = ActionView::PathSet.new
+ end
+
+ delegate :find_template, :template_exists?,
+ :view_paths, :formats, :formats=, :to => :lookup_context
+
+ # LookupContext is the object responsible to hold all information required to lookup
+ # templates, i.e. view paths and details. Check ActionView::LookupContext for more
+ # information.
+ def lookup_context
+ @lookup_context ||= ActionView::LookupContext.new(self.class._view_paths, details_for_lookup)
+ end
+
+ def details_for_lookup
+ { }
+ end
+
+ def append_view_path(path)
+ lookup_context.view_paths.push(*path)
+ end
+
+ def prepend_view_path(path)
+ lookup_context.view_paths.unshift(*path)
+ end
+
+ module ClassMethods
+ # Append a path to the list of view paths for this controller.
+ #
+ # ==== Parameters
+ # path<String, ViewPath>:: If a String is provided, it gets converted into
+ # the default view path. You may also provide a custom view path
+ # (see ActionView::ViewPathSet for more information)
+ def append_view_path(path)
+ self.view_paths = view_paths.dup + Array(path)
+ end
+
+ # Prepend a path to the list of view paths for this controller.
+ #
+ # ==== Parameters
+ # path<String, ViewPath>:: If a String is provided, it gets converted into
+ # the default view path. You may also provide a custom view path
+ # (see ActionView::ViewPathSet for more information)
+ def prepend_view_path(path)
+ self.view_paths = Array(path) + view_paths.dup
+ end
+
+ # A list of all of the default view paths for this controller.
+ def view_paths
+ _view_paths
+ end
+
+ # Set the view paths.
+ #
+ # ==== Parameters
+ # paths<ViewPathSet, Object>:: If a ViewPathSet is provided, use that;
+ # otherwise, process the parameter into a ViewPathSet.
+ def view_paths=(paths)
+ self._view_paths = paths.is_a?(ActionView::PathSet) ? paths : ActionView::Base.process_view_paths(paths)
+ self._view_paths.freeze
+ end
+ end
+ end
+end \ No newline at end of file