require 'webrick' module Atchoum # Webserver the run the website in standalone local mode. # Based on WEBrick. class Server def initialize(script, port=2000) @script = script @port = port end # Starts the webserver def start puts "Starting server on http://localhost:#{@port}..." s = WEBrick::HTTPServer.new( :Port => @port, :DocumentRoot => Dir::pwd ) s.mount("/", Handler, @script) trap("INT") { s.shutdown } s.start end end # Handler of every requests beeing made to the web server. # URLs ending with / are threated as dynamic calls to the # +Website+ pages, other are served as normal static files. class Handler < WEBrick::HTTPServlet::DefaultFileHandler def initialize(server, script) super(server, script) @reloader = Reloader.new(script) @reloader.reload end def service(req, resp) @reloader.reload if /(\w*)\/$/ =~ req.path render resp, $1 else @local_path = Dir::pwd + "/#{req.path}" if File.exist? @local_path do_GET(req, resp) else status = 404 end end end private def render(resp, page=:index) page = :index if page == '' resp['Content-Type'] = "text/html" resp.body = @reloader.instance.render page end end end