0
+require 'active_record'
0
- CGI::unescape(txt).gsub(/[^A-Za-z0-9_]/, '_')
0
+$db_name = 'wiki_dot.db'
0
+$dot_fn = 'wiki_map.tmp.dot'
0
+$png_fn = 'wiki_map.tmp.png'
0
+if !File.exists? $db_name
0
+ db = SQLite3::Database.new($db_name)
0
+ id INTEGER PRIMARY KEY,
0
-$file = File.open("wiki_map.dot", "w")
0
-class HeaderHandler < Mongrel::HttpHandler
0
+ActiveRecord::Base.establish_connection({ :adapter => 'sqlite3',
0
+class Line < ActiveRecord::Base
0
+ CGI::unescape(txt).gsub(/[^A-Za-z0-9_]/, '_')
0
+class WikiLoggerHandler < Mongrel::HttpHandler
0
def process(request,response)
0
response.start(200) do |head, out|
0
head["Content-Type"] = "text/plain"
0
vars = Mongrel::HttpRequest.query_parse(request.params['QUERY_STRING'])
0
- if vars['exit'] == '1'
0
- $file.puts " #{stripdot vars['single']};"
0
+ Line.new(:line => "#{stripdot vars['single']};").save
0
- $file.puts " #{stripdot vars['from']} -> #{stripdot vars['to']};"
0
+ :line => "#{stripdot vars['from']} -> #{stripdot vars['to']};").save
0
+class WikiMapDisplayHandler < Mongrel::HttpHandler
0
+ def process(request,response)
0
+ response.start(200) do |head, out|
0
+ head["Content-Type"] = "image/png"
0
+ vars = Mongrel::HttpRequest.query_parse(request.params['QUERY_STRING'])
0
+ File.open($dot_fn, 'w') do |f|
0
+ f.write((["digraph wiki_map {"] +
0
+ Line.find(:all).collect{|l| " #{l.line}"} + ["}"]).join("\n"))
0
+ `dot -Tpng #{$dot_fn} -o #{$png_fn}`
0
+ out.write File.read($png_fn)
0
-$file.puts "digraph wiki_map {"
0
server = Mongrel::HttpServer.new("127.0.0.1", "9999")
0
-server.register("/", HeaderHandler.new)
0
+server.register("/", WikiLoggerHandler.new)
0
+server.register("/show", WikiMapDisplayHandler.new)
0
server.register("/favicon.ico", Mongrel::Error404Handler.new(""))
Comments
No one has commented yet.