Sha256: c815ae6b27782540c6f7918453f9066466d767c46dffc43e005dc6d19150f88f

Contents?: true

Size: 1.44 KB

Versions: 18

Compression:

Stored size: 1.44 KB

Contents

# encoding: utf-8

# stolen from rails
require 'rack/utils'

module Rango
  module Middlewares
    class Static
      FILE_METHODS = %w(GET HEAD).freeze

      # @since 0.0.2
      def initialize(app)
        @app = app
        @file_server = ::Rack::File.new(Project.settings.media_root)
      end

      # @since 0.0.2
      def call(env)
        path        = env['PATH_INFO'].chomp('/')
        method      = env['REQUEST_METHOD']

        prefix = Project.settings.media_prefix.chomp("/")
        prefix_regexp = Regexp.new(%r[^#{prefix}/])
        if path.match(prefix_regexp) && FILE_METHODS.include?(method)
          if file_exist?(path)
            return @file_server.call(env)
            # else
            # cached_path = directory_exist?(path) ? "#{path}/index" : path
            # cached_path += ::ActionController::Base.page_cache_extension
            #
            # if file_exist?(cached_path)
            #   env['PATH_INFO'] = cached_path
            #   return @file_server.call(env)
            # end
          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

      def directory_exist?(path)
        full_path = File.join(@file_server.root, ::Rack::Utils.unescape(path))
        Dir.exist?(full_path) && File.readable?(full_path)
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
rango-0.1.1.2.11 lib/rango/rack/middlewares/static.rb
rango-0.1.1.2.10 lib/rango/rack/middlewares/static.rb
rango-0.1.1.2.9 lib/rango/rack/middlewares/static.rb
rango-0.1.1.2.8 lib/rango/rack/middlewares/static.rb
rango-0.1.1.2.7 lib/rango/rack/middlewares/static.rb
rango-0.1.1.2.6 lib/rango/rack/middlewares/static.rb
rango-0.1.1.2.5 lib/rango/rack/middlewares/static.rb
rango-0.1.1.2.4 lib/rango/rack/middlewares/static.rb
rango-0.1.1.2.3 lib/rango/rack/middlewares/static.rb
rango-0.1.1.2.2 lib/rango/rack/middlewares/static.rb
rango-0.1.1.2.1 lib/rango/rack/middlewares/static.rb
rango-0.1.1.2 lib/rango/rack/middlewares/static.rb
rango-0.1.1.1 lib/rango/rack/middlewares/static.rb
rango-0.1.1 lib/rango/rack/middlewares/static.rb
rango-0.1.0 lib/rango/rack/middlewares/static.rb
rango-0.0.6 lib/rango/rack/middlewares/static.rb
rango-0.1.pre lib/rango/rack/middlewares/static.rb
rango-0.0.4 lib/rango/rack/middlewares/static.rb