Object
# File lib/heel/rackapp.rb, line 23 23: def initialize(options = {}) 24: @ignore_globs = options[:ignore_globs] ||= %( *~ .htaccess . ) 25: @document_root = options[:document_root] ||= Dir.pwd 26: @directory_listing_allowed = options[:directory_listing_allowed] ||= true 27: @directory_index_html = options[:directory_index_html] ||= "index.html" 28: @using_icons = options[:using_icons] ||= true 29: @icon_url = options[:icon_url] ||= "/heel_icons" 30: @highlighting = options[:highlighting] ||= false 31: @options = options 32: end
interface to rack, env is a hash
returns [ status, headers, body ]
# File lib/heel/rackapp.rb, line 142 142: def call(env) 143: req = Heel::Request.new(env, document_root) 144: if req.get? then 145: if req.forbidden? or should_ignore?(req.request_path) then 146: return ErrorResponse.new(req.path_info,"You do not have permissionto view #{req.path_info}",403).finish 147: end 148: return ErrorResponse.new(req.path_info, "File not found: #{req.path_info}",403).finish unless req.found? 149: return directory_index_response(req) if req.for_directory? 150: return file_response(req) if req.for_file? 151: else 152: return ErrorResponse.new(req.path_info, 153: "Method #{req.request_method} Not Allowed. Only GET is honored.", 154: 405, 155: { "Allow" => "GET" }).finish 156: end 157: end
formulate a directory index response
# File lib/heel/rackapp.rb, line 65 65: def directory_index_response(req) 66: response = ::Rack::Response.new 67: dir_index = File.join(req.request_path, directory_index_html) 68: if File.file?(dir_index) and File.readable?(dir_index) then 69: response['Content-Type'] = mime_map.mime_type_of(dir_index).to_s 70: response['Content-Length'] = File.size(dir_index).to_s 71: response.body = File.open(dir_index) 72: elsif directory_listing_allowed? then 73: body = directory_indexer.index_page_for(req) 74: response['Content-Type'] = 'text/html' 75: response['Content-Length'] = body.length.to_s 76: response.body << body 77: else 78: return ::Heel::ErrorResponse.new(req.path_info,"Directory index is forbidden", 403).finish 79: end 80: return response.finish 81: end
# File lib/heel/rackapp.rb, line 46 46: def directory_index_template_file 47: @directory_index_template_file ||= Heel::Configuration.data_path("listing.rhtml") 48: end
# File lib/heel/rackapp.rb, line 50 50: def directory_indexer 51: indexer_ignore = ( ignore_globs + [ document_root] ).flatten 52: @directory_indexer ||= DirectoryIndexer.new( directory_index_template_file, @options ) 53: end
# File lib/heel/rackapp.rb, line 34 34: def directory_listing_allowed? 35: @directory_listing_allowed 36: end
formulate a file content response. Possibly a coderay highlighted file if it is a type that code ray can deal with and the file is not already an html file.
# File lib/heel/rackapp.rb, line 88 88: def file_response(req) 89: response = ::Rack::Response.new 90: 91: response['Last-Modified'] = req.stat.mtime.rfc822 92: 93: if highlighting? and req.highlighting? then 94: # only do a coderay type check if we are going to use coderay in the 95: # response 96: code_ray_type = CodeRay::FileType[req.request_path, true] 97: if code_ray_type and (code_ray_type != :html) then 98: body = <html> <head> <title>#{req.path_info}</title> <!-- CodeRay syntax highlighting CSS --> <link rel="stylesheet" href="/heel_css/coderay-cycnus.css" type="text/css" /> </head> <body> <div class="CodeRay"> <pre> #{CodeRay.scan_file(req.request_path,:auto).html({:line_numbers => :inline})} </pre> </div> </body> </html> 99: response['Content-Type'] = 'text/html' 100: response['Content-Length'] = body.length.to_s 101: response.body << body 102: return response.finish 103: end 104: end 105: 106: # fall through to a default file return 107: # 108: 109: file_type = mime_map.mime_type_of(req.request_path) 110: response['Content-Type'] = file_type.to_s 111: response['Content-Length'] = req.stat.size.to_s 112: 113: return response.finish do 114: File.open(req.request_path) do |f| 115: while p = f.read(8192) 116: response.write p 117: end 118: end 119: end 120: 121: end
# File lib/heel/rackapp.rb, line 38 38: def highlighting? 39: @highlighting 40: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.