aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/template
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-03-07 19:41:58 +0100
committerJosé Valim <jose.valim@gmail.com>2010-03-07 19:41:58 +0100
commitc7564d74e8a9b451f9fc78566ab0c734671f9612 (patch)
treec903fd5650626a79f53c89ccb1b8e10e1052bae6 /actionpack/lib/action_view/template
parent6e0443fd433393dc1967fab4f4fa06dc2b3c02fd (diff)
downloadrails-c7564d74e8a9b451f9fc78566ab0c734671f9612.tar.gz
rails-c7564d74e8a9b451f9fc78566ab0c734671f9612.tar.bz2
rails-c7564d74e8a9b451f9fc78566ab0c734671f9612.zip
Added template lookup responsible to hold all information used in template lookup.
Diffstat (limited to 'actionpack/lib/action_view/template')
-rw-r--r--actionpack/lib/action_view/template/lookup.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/actionpack/lib/action_view/template/lookup.rb b/actionpack/lib/action_view/template/lookup.rb
new file mode 100644
index 0000000000..ea3a12615b
--- /dev/null
+++ b/actionpack/lib/action_view/template/lookup.rb
@@ -0,0 +1,48 @@
+module ActionView
+ class Template
+ class Lookup
+ attr_reader :details, :view_paths
+
+ class DetailsKey
+ attr_reader :details
+ alias :eql? :equal?
+
+ @details_keys = Hash.new
+
+ def self.get(details)
+ @details_keys[details] ||= new(details)
+ end
+
+ def initialize(details)
+ @details, @hash = details, details.hash
+ end
+ end
+
+ def initialize(view_paths, details = {})
+ @details = details
+ self.view_paths = view_paths
+ end
+
+ def view_paths=(paths)
+ @view_paths = ActionView::Base.process_view_paths(paths)
+ end
+
+ def details=(details)
+ @details = details
+ @details_key = nil if @details_key && @details_key.details != details
+ end
+
+ def details_key
+ @details_key ||= DetailsKey.get(details) unless details.empty?
+ end
+
+ def find(name, prefix = nil, partial = false)
+ @view_paths.find(name, details, prefix, partial || false, details_key)
+ end
+
+ def exists?(name, prefix = nil, partial = false)
+ @view_paths.exists?(name, details, prefix, partial || false, details_key)
+ end
+ end
+ end
+end \ No newline at end of file