-
Notifications
You must be signed in to change notification settings - Fork 4
/
server.rb
93 lines (77 loc) · 2.03 KB
/
server.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
require 'rubygems'
require 'sinatra/base'
require 'sinatra/content_for'
require 'active_record'
ActiveRecord::Base.establish_connection(
:adapter => 'sqlite3',
:database => 'data/people.sqlite3.db'
)
connection_handle = ActiveRecord::Base.connection
class People < ActiveRecord::Base
self.table_name = "people"
end
class Group < ActiveRecord::Base
def url
underscore_name = name.downcase.gsub(" ", "-")
"/group/#{id}-#{underscore_name}"
end
end
class GuessWho < Sinatra::Base
helpers Sinatra::ContentFor
helpers do
def title
sub = @group_name
title = "Guess Who?"
unless sub.nil?
title += " | #{sub}"
end
return title
end
end
# base route
get '/' do
@all_label = ENV["ALL_LABEL"] || "Everyone"
if max_id = ENV['MAX_GROUP_LIST_ID'].to_i
@groups = Group.where("id <= ?", max_id)
else
@groups = Group.all
end
erb :home
end
get '/group/list' do
@all_label = "All Groups"
@groups = Group.all
erb :home
end
get '/group/:group' do
@group_id = params[:group].split("-")[0]
@api_end_point = "/#{@group_id}/random.json"
@use_original_thumbnail = !!(ENV["ORINGAL_THUMBNAIL"] =~ /true/i)
@group_name = Group.where(:id => @group_id).first.name rescue "Everyone"
erb :game
end
# logic to get random people
['/random.json', '/:group/random.json'].each do |path|
get path do
content_type :json
num = 4
@correct_id = rand(num)
@people = People.order("random()").limit(num)
if params[:group] and not params[:group] =~ /all/i
@people = @people.where(:group_id => params[:group])
end
@correct = @people[@correct_id]
{
description: @correct.description,
original_thumbnail: @correct.thumbnail,
thumbnail: "/img/thumbnail/#{@correct.id}.jpg",
web_url: @correct.web_url,
correct_answer_id: @correct_id.to_i,
options: @people.map(&:name)
}.to_json
end
end
after do
ActiveRecord::Base.connection.close
end
end