sloppy
[nancy.git] / nancy.rb
blob7f54b6d6be0581a480e96a489581455ea54840ca
1 $:.unshift File.dirname(__FILE__) + '/sinatra/lib'
2 require 'sinatra/mongrel'
4 require "rubygems"
5 require "erubis/tiny"
6 require "data_mapper"
8 begin
9   require "superredcloth" 
10 rescue LoadError
11   require 'redcloth'
12 end
14 Password = "idigit"
17 DataMapper::Database.setup(
18   :adapter  => 'sqlite3',
19   :database => File.dirname(__FILE__) + "/nancy.#{Sinatra[:env].to_s}.db"
22 class Page < DataMapper::Base
23   property :slug, :string
24   property :body, :text
25   property :created_at, :datetime
26   property :updated_at, :datetime
27 end
29 database.save(Page) unless database.table_exists?(Page)
31 get 404 do
32   "<h1>Unknown page name.  Make sure you don't have /;& in the name</h1>"
33 end
35 helpers do
36     
37   def erbx(key, layout = :layout)
38     path = File.dirname(__FILE__) + "/views/%s.erb" % key
39     result = Erubis::TinyEruby.new(File.read(path)).evaluate(self)
40     if layout && key.to_s !~ /^_/
41       erbx(layout, nil) { result }
42     else
43       result
44     end
45   end
46   
47 end
49 get '/' do
50   redirect '/StartPage'
51 end
53 get '/:slug' do
54   @page = Page.find(:first, params.pass(:slug))
55   if @page
56     erbx :show
57   else
58     redirect "/#{params[:slug].to_param}/edit"
59   end
60 end
62 get '/:slug/edit' do
63   @page = Page.find(:first, params.pass(:slug)) || Page.new(params.pass(:slug))
64   erbx :edit
65 end
67 post '/' do
68   if params[:password] == Password
69     @page = Page.find_or_create(params.pass(:slug), {})
70     @page.update_attributes(params.pass(:body))
71     redirect "/#{@page.slug.to_param}"
72   else
73     status 401
74     'No way daddy-o'
75   end
76 end