Class: Rack::App::FileServer

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/app/file_server.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root_folder, opts = {}) ⇒ FileServer

Returns a new instance of FileServer.



14
15
16
17
18
19
20
21
22
# File 'lib/rack/app/file_server.rb', line 14

def initialize(root_folder, opts = {})
  @root_folder = root_folder
  @relative_file_paths = []
  @rack_file_server = ::Rack::Files.new(@root_folder, {})

  if map_relative_file_paths?(opts)
    map_relative_paths!
  end
end

Instance Attribute Details

#relative_file_pathsObject

Returns the value of attribute relative_file_paths.



2
3
4
# File 'lib/rack/app/file_server.rb', line 2

def relative_file_paths
  @relative_file_paths
end

Class Method Details

.serve_file(env, file_path) ⇒ Object



4
5
6
7
8
9
10
11
12
# File 'lib/rack/app/file_server.rb', line 4

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

Instance Method Details

#call(env) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/rack/app/file_server.rb', line 24

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