diff options
author | José Valim <jose.valim@gmail.com> | 2010-10-10 23:11:50 +0200 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2010-10-10 23:12:23 +0200 |
commit | 5ec27189b8b433145baa7270cf4219c5041f6a4c (patch) | |
tree | 60978ebf6493b79f450215f057e2353f9795a0b8 /actionpack/lib | |
parent | 682368d4ba0bb4548f896d02bc4e038ee8ba6b4d (diff) | |
download | rails-5ec27189b8b433145baa7270cf4219c5041f6a4c.tar.gz rails-5ec27189b8b433145baa7270cf4219c5041f6a4c.tar.bz2 rails-5ec27189b8b433145baa7270cf4219c5041f6a4c.zip |
Do not allow templates coming from Fallback resolvers to store a virtual path.
Diffstat (limited to 'actionpack/lib')
-rw-r--r-- | actionpack/lib/action_view.rb | 1 | ||||
-rw-r--r-- | actionpack/lib/action_view/lookup_context.rb | 2 | ||||
-rw-r--r-- | actionpack/lib/action_view/template/resolver.rb | 13 |
3 files changed, 15 insertions, 1 deletions
diff --git a/actionpack/lib/action_view.rb b/actionpack/lib/action_view.rb index ad96f6c66d..0f9d35d062 100644 --- a/actionpack/lib/action_view.rb +++ b/actionpack/lib/action_view.rb @@ -57,6 +57,7 @@ module ActionView autoload :Resolver autoload :PathResolver autoload :FileSystemResolver + autoload :FallbackFileSystemResolver end autoload_at "action_view/template/error" do diff --git a/actionpack/lib/action_view/lookup_context.rb b/actionpack/lib/action_view/lookup_context.rb index 0cff888ac1..80451798b1 100644 --- a/actionpack/lib/action_view/lookup_context.rb +++ b/actionpack/lib/action_view/lookup_context.rb @@ -10,7 +10,7 @@ module ActionView # this key is generated just once during the request, it speeds up all cache accesses. class LookupContext #:nodoc: mattr_accessor :fallbacks - @@fallbacks = [FileSystemResolver.new(""), FileSystemResolver.new("/")] + @@fallbacks = FallbackFileSystemResolver.instances mattr_accessor :registered_details self.registered_details = [] diff --git a/actionpack/lib/action_view/template/resolver.rb b/actionpack/lib/action_view/template/resolver.rb index 5c6877a923..7707dbcf98 100644 --- a/actionpack/lib/action_view/template/resolver.rb +++ b/actionpack/lib/action_view/template/resolver.rb @@ -135,6 +135,7 @@ module ActionView end end + # A resolver that loads files from the filesystem. class FileSystemResolver < PathResolver def initialize(path) raise ArgumentError, "path already is a Resolver class" if path.is_a?(Resolver) @@ -152,4 +153,16 @@ module ActionView end alias :== :eql? end + + # The same as FileSystemResolver but does not allow templates to store + # a virtual path since it is invalid for such resolvers. + class FallbackFileSystemResolver < FileSystemResolver + def self.instances + [new(""), new("/")] + end + + def decorate(*) + super.each { |t| t.virtual_path = nil } + end + end end |