aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/path_set.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_view/path_set.rb')
-rw-r--r--actionpack/lib/action_view/path_set.rb41
1 files changed, 41 insertions, 0 deletions
diff --git a/actionpack/lib/action_view/path_set.rb b/actionpack/lib/action_view/path_set.rb
new file mode 100644
index 0000000000..e3de3e1eac
--- /dev/null
+++ b/actionpack/lib/action_view/path_set.rb
@@ -0,0 +1,41 @@
+module ActionView #:nodoc:
+ # = Action View PathSet
+ class PathSet < Array #:nodoc:
+ %w(initialize << concat insert push unshift).each do |method|
+ class_eval <<-METHOD, __FILE__, __LINE__ + 1
+ def #{method}(*args)
+ super
+ typecast!
+ end
+ METHOD
+ end
+
+ def find(*args)
+ find_all(*args).first || raise(MissingTemplate.new(self, *args))
+ end
+
+ def find_all(path, prefixes = [], *args)
+ prefixes.each do |prefix|
+ each do |resolver|
+ templates = resolver.find_all(path, prefix, *args)
+ return templates unless templates.empty?
+ end
+ end
+ []
+ end
+
+ def exists?(*args)
+ find_all(*args).any?
+ end
+
+ protected
+
+ def typecast!
+ each_with_index do |path, i|
+ path = path.to_s if path.is_a?(Pathname)
+ next unless path.is_a?(String)
+ self[i] = FileSystemResolver.new(path)
+ end
+ end
+ end
+end