Class: Rack::App::FileServer
- Inherits:
-
Object
- Object
- Rack::App::FileServer
- Defined in:
- lib/rack/app/file_server.rb
Instance Attribute Summary collapse
-
#relative_file_paths ⇒ Object
Returns the value of attribute relative_file_paths.
Class Method Summary collapse
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(root_folder, opts = {}) ⇒ FileServer
constructor
A new instance of FileServer.
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_paths ⇒ Object
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 |