aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/template/path.rb
diff options
context:
space:
mode:
authorCarl Lerche & Yehuda Katz <wycats@gmail.com>2009-04-14 17:22:51 -0700
committerCarl Lerche & Yehuda Katz <wycats@gmail.com>2009-04-14 18:32:31 -0700
commit3c1187699a80e0c4a003f5693389595cd644390f (patch)
tree3fc026e57412f4d145d5df314b4c6ce468ab84c1 /actionpack/lib/action_view/template/path.rb
parent109a3876f09cb6b51a6da4d517bd6e3ea30380da (diff)
downloadrails-3c1187699a80e0c4a003f5693389595cd644390f.tar.gz
rails-3c1187699a80e0c4a003f5693389595cd644390f.tar.bz2
rails-3c1187699a80e0c4a003f5693389595cd644390f.zip
Makes rails-dev-boost work again
Diffstat (limited to 'actionpack/lib/action_view/template/path.rb')
-rw-r--r--actionpack/lib/action_view/template/path.rb87
1 files changed, 87 insertions, 0 deletions
diff --git a/actionpack/lib/action_view/template/path.rb b/actionpack/lib/action_view/template/path.rb
new file mode 100644
index 0000000000..9709549b70
--- /dev/null
+++ b/actionpack/lib/action_view/template/path.rb
@@ -0,0 +1,87 @@
+module ActionView
+ class Template
+ class Path
+ attr_reader :path, :paths
+ delegate :hash, :inspect, :to => :path
+
+ def initialize(options)
+ @cache = options[:cache]
+ end
+
+ def to_s
+ if defined?(RAILS_ROOT)
+ path.to_s.sub(/^#{Regexp.escape(File.expand_path(RAILS_ROOT))}\//, '')
+ else
+ path.to_s
+ end
+ end
+
+ def to_str
+ path.to_str
+ end
+
+ def ==(path)
+ to_str == path.to_str
+ end
+
+ def eql?(path)
+ to_str == path.to_str
+ end
+
+ def find_by_parts(name, extensions = nil, prefix = nil, partial = nil)
+ path = prefix ? "#{prefix}/" : ""
+
+ name = name.to_s.split("/")
+ name[-1] = "_#{name[-1]}" if partial
+
+ path << name.join("/")
+
+ template = nil
+
+ Array(extensions).each do |extension|
+ extensioned_path = extension ? "#{path}.#{extension}" : path
+ break if (template = find_template(extensioned_path))
+ end
+ template || find_template(path)
+ end
+
+ private
+ def create_template(file)
+ Template.new(file.split("#{self}/").last, self)
+ end
+ end
+
+ class FileSystemPath < Path
+ def initialize(path, options = {})
+ raise ArgumentError, "path already is a Path class" if path.is_a?(Path)
+
+ super(options)
+ @path, @paths = path, {}
+
+ # **/*/** is a hax for symlinked directories
+ load_templates("#{@path}/{**/*,**}/**") if @cache
+ end
+
+ private
+
+ def load_template(template)
+ template.load!
+ template.accessible_paths.each do |path|
+ @paths[path] = template
+ end
+ end
+
+ def find_template(path)
+ load_templates("#{@path}/#{path}{,.*}") unless @cache
+ @paths[path]
+ end
+
+ def load_templates(glob)
+ Dir[glob].each do |file|
+ load_template(create_template(file)) unless File.directory?(file)
+ end
+ end
+
+ end
+ end
+end \ No newline at end of file