refactoring done, it works now
[zip-doc.git] / mongrel-web.rb
blobd6040c3434bd6fa125648a690d6766b66a5f7ab4
1 #!/usr/bin/ruby
2 %w(cgi rubygems mongrel zarchive htmlshrinker).each {|x| require x}
4 # from http://railsruby.blogspot.com/2006/07/url-escape-and-url-unescape.html
5 def url_unescape(string)
6   string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
7     [$1.delete('%')].pack('H*')
8   end
9 end                           
11 Archive = ZArchive.new(ARGV[0])
12 template = Archive.get_article('__Zdump_Template__')
13 Basename = ARGV[1].nil? ? '' : ARGV[1]
14 Htmlshrink = HTMLExpander.new(template, Archive, Basename)
15 class SimpleHandler < Mongrel::HttpHandler
16   def process(req, resp)
17     t = Time.now                                    
18     url = url_unescape(req.params['PATH_INFO'][1..-1])
19 #    return if url =~ /(jpg|png|gif)$/
20     url = "#{Basename}index.html" if url.empty?
21     url = Basename + url unless url[0..(Basename.size-1)] == Basename 
22     
23     # if style/js
24     if url.match(/(raw|skins|images)\/(.*?)$/)
25       url = Basename + Regexp::last_match[0]
26       resp.write Archive.get_article(url)
27     else
28       txt = Archive.get_article(url)
29       resp.write txt.nil? ? "Sorry, article not found" : Htmlshrink.uncompress(txt)
30       
31     end
32   end
33 end 
36 h = Mongrel::HttpServer.new("0.0.0.0", "2042")
37 h.register("/", SimpleHandler.new)
38 h.register("/raw", Mongrel::DirHandler.new("raw"))
39 h.register("/skins", Mongrel::DirHandler.new("skins"))
41 puts "Webserver started, serving at http://localhost:2042/"
42 h.run.join