Sha256: 1b792870e18a7c3c48371a399db5cab9dc923518c13aada91ba81a3dd89b3dc1

Contents?: true

Size: 1.88 KB

Versions: 25

Compression:

Stored size: 1.88 KB

Contents

module Merb
  module Rack
    class Static < Merb::Rack::Middleware

      # :api: private
      def initialize(app,directory)
        super(app)
        @static_server = ::Rack::File.new(directory)
      end
      
      # :api: plugin
      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
      
        # ==== Parameters
        # path<String>:: The path to the file relative to the server root.
        #
        # ==== Returns
        # Boolean:: True if file exists under the server root and is readable.
        #
        # :api: private
        def file_exist?(path)
          full_path = ::File.join(@static_server.root, ::Merb::Parse.unescape(path))
          ::File.file?(full_path) && ::File.readable?(full_path)
        end

        # ==== Parameters
        # env<Hash>:: Environment variables to pass on to the server.
        #
        # :api: private
        def serve_static(env)
          env[Merb::Const::PATH_INFO] = ::Merb::Parse.unescape(env[Merb::Const::PATH_INFO])
          @static_server.call(env)
        end
      
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
merb-core-1.1.3 lib/merb-core/rack/middleware/static.rb
merb-core-1.1.2 lib/merb-core/rack/middleware/static.rb
merb-core-1.1.1 lib/merb-core/rack/middleware/static.rb
merb-core-1.1.0 lib/merb-core/rack/middleware/static.rb
merb-core-1.1.0.rc1 lib/merb-core/rack/middleware/static.rb
merb-core-1.1.0.pre lib/merb-core/rack/middleware/static.rb
merb-core-1.0.15 lib/merb-core/rack/middleware/static.rb
merb-core-1.0.14 lib/merb-core/rack/middleware/static.rb
merb-core-1.0.13 lib/merb-core/rack/middleware/static.rb
merb-core-1.0.12 lib/merb-core/rack/middleware/static.rb
merb-core-1.0.11 lib/merb-core/rack/middleware/static.rb
merb-core-1.0.2 lib/merb-core/rack/middleware/static.rb
merb-core-1.0.1 lib/merb-core/rack/middleware/static.rb
merb-core-1.0.10 lib/merb-core/rack/middleware/static.rb
merb-core-1.0.3 lib/merb-core/rack/middleware/static.rb
merb-core-1.0.4 lib/merb-core/rack/middleware/static.rb
merb-core-1.0.5 lib/merb-core/rack/middleware/static.rb
merb-core-1.0.6.1 lib/merb-core/rack/middleware/static.rb
merb-core-1.0.7.1 lib/merb-core/rack/middleware/static.rb
merb-core-1.0.6 lib/merb-core/rack/middleware/static.rb