diff options
author | Pratik Naik <pratiknaik@gmail.com> | 2008-06-02 12:29:28 +0100 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2008-06-02 12:29:28 +0100 |
commit | 719aa13b0781d662673dba2225bc707fc4182b5e (patch) | |
tree | 057cabf17152a1ab0ccc749dd361eeaf754c38de /railties/lib/rails/rack | |
parent | ad3c97cea6dd0714652db7d9b5b4d06b81e5c035 (diff) | |
parent | a980eb8c7734f14109d8c2a02a88dafdf682e0dc (diff) | |
download | rails-719aa13b0781d662673dba2225bc707fc4182b5e.tar.gz rails-719aa13b0781d662673dba2225bc707fc4182b5e.tar.bz2 rails-719aa13b0781d662673dba2225bc707fc4182b5e.zip |
Merge commit 'mainstream/master'
Diffstat (limited to 'railties/lib/rails/rack')
-rw-r--r-- | railties/lib/rails/rack/static.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/railties/lib/rails/rack/static.rb b/railties/lib/rails/rack/static.rb new file mode 100644 index 0000000000..45eb0e5921 --- /dev/null +++ b/railties/lib/rails/rack/static.rb @@ -0,0 +1,35 @@ +module Rails + module Rack + class Static + FILE_METHODS = %w(GET HEAD).freeze + + def initialize(app) + @app = app + @file_server = ::Rack::File.new(File.join(RAILS_ROOT, "public")) + end + + def call(env) + path = env['PATH_INFO'].chomp('/') + method = env['REQUEST_METHOD'] + cached_path = (path.empty? ? 'index' : path) + ::ActionController::Base.page_cache_extension + + if FILE_METHODS.include?(method) + if file_exist?(path) + return @file_server.call(env) + elsif file_exist?(cached_path) + env['PATH_INFO'] = cached_path + return @file_server.call(env) + end + end + + @app.call(env) + end + + private + def file_exist?(path) + full_path = File.join(@file_server.root, ::Rack::Utils.unescape(path)) + File.file?(full_path) && File.readable?(full_path) + end + end + end +end |