diff options
Diffstat (limited to 'actionpack/lib/action_view/path_set.rb')
-rw-r--r-- | actionpack/lib/action_view/path_set.rb | 41 |
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 |