git.fiddlerwoaroof.com
Raw Blame History
# 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