/
matemeister.rb
executable file
·120 lines (102 loc) · 1.87 KB
/
matemeister.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env ruby
#MetaMeute MateMeister
#Copyright (C) 2012 Anton Pirogov
#Licensed under the WTFPL
require 'sinatra'
require 'haml'
require './base'
$b = Base.new
#UI
get '/' do
haml :users
end
get '/users' do
haml :users
end
get '/drinks' do
@drinks = $b.drinks
haml :drinks
end
get '/log' do
haml :log
end
#direct database routes
#user modification routes
user_handler = lambda do
u = params[:username]
n = params[:num]
return haml(:error) if u.match(/\w+/).to_s != u
return haml(:error) if u.empty?
return haml(:error) if !n.numeric?
n = n.to_i
a = params[:action]
p = params[:p]
case a
when 'setid'
if $b.set_id(u,n)
haml :users
else
haml :error
end
when 'drink'
if $b.drink(u,n,p)
haml :users
else
haml :error
end
when 'pay'
if $b.pay(u,n)
haml :users
else
haml :error
end
when 'transfer'
return haml(:error) if p.nil?
return haml(:error) if p.match(/\w+/).to_s != p
if $b.transfer(u,p,n)
haml :users
else
haml :error
end
else
haml :error
end
end
get '/user/:username/:action/:num/?:p?', &user_handler
post '/', &user_handler
drink_handler = lambda do
d = params[:drink]
a = params[:action]
p = params[:p]
return haml(:error) if d.match(/\w+/).to_s != d
return haml(:error) if d.empty?
return haml(:error) if !p.nil? && !p.numeric?
p = p.to_i
case a
when 'setprice'
if $b.set_price(d,p)
haml :drinks
else
haml :error
end
when 'addstock'
if $b.add_stock(d,p)
haml :drinks
else
haml :error
end
when 'rmdrink'
if $b.rm_drink(d)
haml :drinks
else
haml :error
end
else
haml :error
end
end
#drink modification routes
get '/drink/:drink/:action/?:p?', &drink_handler
post '/drink', &drink_handler
#close database on quitting
trap(:INT){ $b.close }