Class: Merb::Rack::Static
- Inherits:
-
Middleware
- Object
- Middleware
- Merb::Rack::Static
- Defined in:
- merb-core/lib/merb-core/rack/middleware/static.rb
Instance Method Summary (collapse)
- - (Object) call(env)
-
- (Boolean) file_exist?(path)
private
True if file exists under the server root and is readable.
-
- (Static) initialize(app, directory)
constructor
private
A new instance of Static.
- - (Object) serve_static(env) private
Methods included from DeferrableMiddleware
Constructor Details
- (Static) initialize(app, directory)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
A new instance of Static
6 7 8 9 |
# File 'merb-core/lib/merb-core/rack/middleware/static.rb', line 6 def initialize(app,directory) super(app) @static_server = ::Rack::File.new(directory) end |
Instance Method Details
- (Object) call(env)
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'merb-core/lib/merb-core/rack/middleware/static.rb', line 12 def call(env) path = if env[Merb::Const::PATH_INFO] env[Merb::Const::PATH_INFO].chomp(Merb::Const::SLASH) else Merb::Const::EMPTY_STRING end cached_path = (path.empty? ? 'index' : path) + '.html' if file_exist?(path) && env[Merb::Const::REQUEST_METHOD] =~ /GET|HEAD/ # Serve the file if it's there and the request method is GET or HEAD serve_static(env) elsif file_exist?(cached_path) && env[Merb::Const::REQUEST_METHOD] =~ /GET|HEAD/ # Serve the page cache if it's there and the request method is GET or HEAD env[Merb::Const::PATH_INFO] = cached_path serve_static(env) elsif path =~ /favicon\.ico/ return [404, { Merb::Const::CONTENT_TYPE => Merb::Const::TEXT_SLASH_HTML }, "404 Not Found."] else @app.call(env) end end |
- (Boolean) file_exist?(path)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
True if file exists under the server root and is readable.
37 38 39 40 |
# File 'merb-core/lib/merb-core/rack/middleware/static.rb', line 37 def file_exist?(path) full_path = ::File.join(@static_server.root, ::Merb::Parse.unescape(path)) ::File.file?(full_path) && ::File.readable?(full_path) end |
- (Object) serve_static(env)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
45 46 47 48 |
# File 'merb-core/lib/merb-core/rack/middleware/static.rb', line 45 def serve_static(env) env[Merb::Const::PATH_INFO] = ::Merb::Parse.unescape(env[Merb::Const::PATH_INFO]) @static_server.call(env) end |