Sha256: 0b687a2068600b8996353649446e10a5c88b172f0090064940626e54203cdb9a

Contents?: true

Size: 1.07 KB

Versions: 46

Compression:

Stored size: 1.07 KB

Contents

class Rack::App::FileServer

  def initialize(root_folder)
    require 'rack/file'
    @root_folder = root_folder
    @relative_file_paths = Dir.glob(File.join(@root_folder, '**', '*')).map { |file_path| file_path.sub(@root_folder, '') }.sort_by { |str| str.length }.reverse
    @rack_file_server = ::Rack::File.new(@root_folder, {})
  end

  def call(env)
    path_info = clean_path_info(env)

    @relative_file_paths.each do |relative_file_path|
      if path_info =~ /#{Regexp.escape(relative_file_path)}$/
        env[::Rack::App::Constants::ENV::PATH_INFO]= relative_file_path
        break
      end
    end

    @rack_file_server.call(env)
  end

  def self.serve_file(env, file_path)
    file_server = self.new(File.dirname(file_path))
    env = env.dup
    env[::Rack::App::Constants::ENV::REQUEST_METHOD]= 'GET'
    env[::Rack::App::Constants::ENV::PATH_INFO]= file_path
    file_server.call(env)
  end

  protected

  def clean_path_info(env)
    path_info = ::Rack::Utils.unescape(env[::Rack::App::Constants::ENV::PATH_INFO])
    ::Rack::Utils.clean_path_info(path_info)
  end

end

Version data entries

46 entries across 46 versions & 1 rubygems

Version Path
rack-app-7.6.5 lib/rack/app/file_server.rb
rack-app-7.6.4 lib/rack/app/file_server.rb
rack-app-7.6.3 lib/rack/app/file_server.rb
rack-app-7.6.2 lib/rack/app/file_server.rb
rack-app-7.6.1 lib/rack/app/file_server.rb
rack-app-7.6.0 lib/rack/app/file_server.rb
rack-app-7.5.2 lib/rack/app/file_server.rb
rack-app-7.5.1 lib/rack/app/file_server.rb
rack-app-7.5.0 lib/rack/app/file_server.rb
rack-app-7.4.0 lib/rack/app/file_server.rb
rack-app-7.3.2 lib/rack/app/file_server.rb
rack-app-7.3.1 lib/rack/app/file_server.rb
rack-app-7.3.0 lib/rack/app/file_server.rb
rack-app-7.2.2 lib/rack/app/file_server.rb
rack-app-7.2.1 lib/rack/app/file_server.rb
rack-app-7.2.0 lib/rack/app/file_server.rb
rack-app-7.1.0 lib/rack/app/file_server.rb
rack-app-7.0.0 lib/rack/app/file_server.rb
rack-app-6.8.0 lib/rack/app/file_server.rb
rack-app-6.7.1 lib/rack/app/file_server.rb