removed Basename from mongrel-web
[zip-doc.git] / mongrel-web.rb
blobe3f54ceb7d422d8c6295d9b26a85060f761a7ebc
1 #!/usr/bin/ruby
2 # Web server for viewing zdump files.
3 # By Stian Haklev (shaklev@gmail.com), 2007
4 # Released under MIT and GPL licenses
6 # Usage:
7 # ruby mongrel-web.rb <zdumpfile> <path-prefix>
9 %w(cgi rubygems mongrel zarchive htmlshrinker).each {|x| require x}
11 # from http://railsruby.blogspot.com/2006/07/url-escape-and-url-unescape.html
12 def url_unescape(string)
13   string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
14     [$1.delete('%')].pack('H*')
15   end
16 end                           
18 Archive = ZArchive.new(ARGV[0])
19 template = Archive.get_article('__Zdump_Template__')
20 Htmlshrink = HTMLExpander.new(template, Archive, Basename)
21 Cache = {}
22 class SimpleHandler < Mongrel::HttpHandler
23   def process(req, resp)
24     t = Time.now                                    
25     url = url_unescape(req.params['PATH_INFO'][1..-1])
26     url = "index.html" if url.empty?
27     
28     # if style/js
29     if url.match(/(raw|skins|images)\/(.*?)$/)
30       url = Regexp::last_match[0]
31       if Cache[url]
32         text = Cache[url]
33       else
34         text = Archive.get_article(url)
35         return if text.nil? 
36         line1, line2 = text.split("\n",2) 
37         text = line2 if line1 == 'Unnamed'
38         Cache[url] = text
39       end
40       resp.write text
41     else
42       txt = Archive.get_article(url)
43       resp.write txt.nil? ? "Sorry, article #{url} not found" : Htmlshrink.uncompress(txt)
44     end
45     puts "Got #{url} in #{"%2.3f" % (Time.now - t)} seconds."
46   end
47 end 
50 h = Mongrel::HttpServer.new("0.0.0.0", "2042")
51 h.register("/", SimpleHandler.new)
53 puts "Webserver started, serving at http://localhost:2042/"
54 h.run.join