git.fiddlerwoaroof.com
src/main.rb
4ad42706
 # myapp.rb
 require 'sinatra'
d55c8a52
 require 'sinatra/partial'
4ad42706
 require 'haml'
d55c8a52
 require 'pg'
 require './config'
 
 def connect_db
   return PG::Connection.open(:dbname=>$appsettings[:dbname],
                              :host=>$appsettings[:dbhost],
                              :user=>$appsettings[:dbuser],
                              :password=>$appsettings[:dbpassword])
 end
 
 def check_user(db, user)
   result = nil
   db.prepare 'check_user', 'SELECT exists(SELECT 1 FROM reviewers WHERE reviewer_name=$1)'
   if not user.nil?
     v = db.exec_prepared('check_user', [user])
     if v.first()['exists'] == 't'
       result = user
     end
   end
   return result
 end
 
 use Rack::Session::Pool, :expire_after => 2592000
4ad42706
 
 get '/' do
d55c8a52
   if params[:cur_user]
     session[:cur_user] = params[:cur_user]
   end
 
   short_name = params.find do |x| x[1] == nil end
   db = connect_db()
   cur_user = check_user(db, session[:cur_user])
   if short_name.nil?
     restaurants = db.exec 'SELECT restaurant_name,short_name FROM restaurants ORDER BY restaurant_name ASC'
     haml :index, :locals => {:restaurants => restaurants, :cur_user => cur_user}
   else
     short_name = short_name[0]
     db.prepare 'get_restaurant_name', 'SELECT restaurant_name FROM restaurants WHERE short_name=$1'
     db.prepare 'get_reviews', 'SELECT * FROM get_reviews($1)'
 
     name = db.exec_prepared('get_restaurant_name', [short_name]).first['restaurant_name']
     results = db.exec_prepared 'get_reviews', [short_name]
     haml :restaurant, :locals => {:reviews => results,
                              :name => name,
                              :short_name => short_name,
                              :cur_user => cur_user}
   end
4ad42706
 end
 
d55c8a52
 def short_name(name)
   name.downcase().gsub(/[^a-zA-Z0-9]/, '-')
 end
 
 post '/add/restaurant' do
   db = connect_db()
   if check_user(db, session[:cur_user]).nil?
     redirect to("/")
   else
     db.prepare 'add_restaurant', 'INSERT INTO restaurants (restaurant_name, short_name) VALUES ($1,$2)'
     name = params[:restaurant_name]
     sn = short_name(name)
     db.exec_prepared 'add_restaurant', [name, sn]
     redirect to("/?#{sn}")
   end
 end
 
 
 post '/add/review' do
   db = connect_db()
   if check_user(db, session[:cur_user]).nil?
     redirect to("/?#{params[:short_name]}")
   else
     db.prepare 'put_review',  'SELECT * FROM put_review($1, $2, $3)'
     db.exec_prepared 'put_review', [ params[:short_name], session[:cur_user], params[:review] ]
     redirect to("/?#{params[:short_name]}")
   end
 end
4ad42706