# myapp.rb require 'sinatra' require 'sinatra/partial' require 'haml' 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 get '/' do 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 end 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