#!/usr/bin/env ruby
#!/usr/bin/ruby -rcgi
class GitWiki
attr_accessor :wiki_dir, :main_page, :base_url
def initialize(wiki_dir="/home/sbecker/drunkenruby.com/public/wiki/",base_url="drunken.cgi?page=%s",main_page = "DrunkenRuby")
@wiki_dir = wiki_dir
@main_page = main_page
@base_url = base_url
end
def not_found_message(*args)
"Page not found!"
end
def save_wiki_page(page,data,message = "No Message")
`echo "#{data.gsub('"','\"')}" > wiki/#{page} `
e = $?.exitstatus
if e == 0
`cd wiki &&git add . && git commit -m "#{message}" `
true
else
false
end
end
def get_wiki_revision_numbers(page,limit = 5 )
revisions = Array.new
sys_rev = `cd wiki && git log --pretty=oneline #{page}`
revisions = sys_rev.split("\n").map{|r| r.split[0]} if $?.exitstatus == 0
revisions[1..5]
end
def get_page(name, revision=nil)
t = nil
if revision.to_s == ""
t = `cat wiki/#{name}`
else
t = `cd wiki &&git show #{revision}:#{name}`
t = "
No rev:#{revision} found
"+ `cat wiki/#{name}` if $?.exitstatus != 0
end
t
end
end
begin
wiki = GitWiki.new
c = CGI.new('html4')
n,d = c['page']!=''?c['page']:wiki.main_page,c['data']
e = nil
if d != ''
if wiki.save_wiki_page(n,d,c["message"])
print c.header({'Status' => '302 Moved', 'location' => wiki.base_url%"#{n}&save_status=#{e}"})
end
e = "There was an error saving." #the save failed
else
t = wiki.get_page(n,c["rev"]) || wiki.not_found_message
revisions = wiki.get_wiki_revision_numbers(n)
c.instance_eval{ out{ html(){
"