beerdb 0.9.4 → 0.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Manifest.txt +3 -14
- data/README.md +2 -2
- data/lib/beerdb/cli/main.rb +12 -6
- data/lib/beerdb/deleter.rb +8 -5
- data/lib/beerdb/models/beer.rb +4 -18
- data/lib/beerdb/models/brewery.rb +11 -14
- data/lib/beerdb/models/forward.rb +6 -5
- data/lib/beerdb/models/world/city.rb +14 -0
- data/lib/beerdb/models/{country.rb → world/country.rb} +0 -0
- data/lib/beerdb/models/world/region.rb +14 -0
- data/lib/beerdb/reader.rb +11 -5
- data/lib/beerdb/schema.rb +11 -104
- data/lib/beerdb/stats.rb +11 -12
- data/lib/beerdb/version.rb +15 -2
- data/lib/beerdb.rb +12 -184
- data/test/helper.rb +2 -11
- data/test/test_fixture_matchers.rb +0 -1
- metadata +27 -38
- data/lib/beerdb/models/bookmark.rb +0 -33
- data/lib/beerdb/models/city.rb +0 -14
- data/lib/beerdb/models/drink.rb +0 -25
- data/lib/beerdb/models/note.rb +0 -15
- data/lib/beerdb/models/region.rb +0 -14
- data/lib/beerdb/models/user.rb +0 -29
- data/lib/beerdb/server/public/style.css +0 -36
- data/lib/beerdb/server/views/_debug.erb +0 -17
- data/lib/beerdb/server/views/_version.erb +0 -7
- data/lib/beerdb/server/views/debug.erb +0 -3
- data/lib/beerdb/server/views/index.erb +0 -156
- data/lib/beerdb/server/views/layout.erb +0 -15
- data/lib/beerdb/server.rb +0 -248
@@ -1,156 +0,0 @@
|
|
1
|
-
|
2
|
-
<h1>beer.db JSON(P) API Demo</h1>
|
3
|
-
|
4
|
-
<h2>Examples</h2>
|
5
|
-
|
6
|
-
<h3>Get beer by key <code>/beer/<span class='params'>:key</span></code></h3>
|
7
|
-
|
8
|
-
<table>
|
9
|
-
<tr>
|
10
|
-
<td>
|
11
|
-
<code>
|
12
|
-
<a href='<%= url("/beer/guinness") %>'>
|
13
|
-
/beer/<span class='params'>guinness</span>
|
14
|
-
</a>
|
15
|
-
</code>
|
16
|
-
</td>
|
17
|
-
</tr>
|
18
|
-
|
19
|
-
<tr>
|
20
|
-
<td>
|
21
|
-
<code>
|
22
|
-
<a href='<%= url("/beer/murphysred") %>'>
|
23
|
-
/beer/<span class='params'>murphysred</span>
|
24
|
-
</a>
|
25
|
-
</code>
|
26
|
-
</td>
|
27
|
-
</tr>
|
28
|
-
|
29
|
-
<tr>
|
30
|
-
<td>
|
31
|
-
<code>
|
32
|
-
<a href='<%= url("/beer/brooklynlager") %>'>
|
33
|
-
/beer/<span class='params'>brooklynlager</span>
|
34
|
-
</a>
|
35
|
-
</code>
|
36
|
-
</td>
|
37
|
-
</tr>
|
38
|
-
|
39
|
-
<tr>
|
40
|
-
<td>
|
41
|
-
<code>
|
42
|
-
<a href='<%= url("/beer/corona") %>'>
|
43
|
-
/beer/<span class='params'>corona</span>
|
44
|
-
</a>
|
45
|
-
</code>
|
46
|
-
</td>
|
47
|
-
</tr>
|
48
|
-
|
49
|
-
<tr>
|
50
|
-
<td>
|
51
|
-
<code>
|
52
|
-
<a href='<%= url("/beer/dosequisamber") %>'>
|
53
|
-
/beer/<span class='params'>dosequisamber</span>
|
54
|
-
</a>
|
55
|
-
</code>
|
56
|
-
</td>
|
57
|
-
</tr>
|
58
|
-
|
59
|
-
<tr>
|
60
|
-
<td>
|
61
|
-
<code>
|
62
|
-
<a href='<%= url("/beer/ottakringerhelles") %>'>
|
63
|
-
/beer/<span class='params'>ottakringerhelles</span>
|
64
|
-
</a>
|
65
|
-
</code>
|
66
|
-
</td>
|
67
|
-
</tr>
|
68
|
-
|
69
|
-
</table>
|
70
|
-
|
71
|
-
<h3>Get random beer <code>/beer/<span class='params'>rand</span></code></h3>
|
72
|
-
|
73
|
-
<table>
|
74
|
-
<tr>
|
75
|
-
<td>
|
76
|
-
<code>
|
77
|
-
<a href='<%= url("/beer/rand") %>'>
|
78
|
-
/beer/<span class='params'>rand</span>
|
79
|
-
</a>
|
80
|
-
</code>
|
81
|
-
</td>
|
82
|
-
</tr>
|
83
|
-
</table>
|
84
|
-
|
85
|
-
|
86
|
-
<h3>Get brewery by key <code>/brewery/<span class='params'>:key</span></code></h3>
|
87
|
-
|
88
|
-
<table>
|
89
|
-
<tr>
|
90
|
-
<td>
|
91
|
-
<code>
|
92
|
-
<a href='<%= url("/brewery/guinness") %>'>
|
93
|
-
/brewery/<span class='params'>guinness</span>
|
94
|
-
</a>
|
95
|
-
</code>
|
96
|
-
</td>
|
97
|
-
</tr>
|
98
|
-
|
99
|
-
<tr>
|
100
|
-
<td>
|
101
|
-
<code>
|
102
|
-
<a href='<%= url("/brewery/fuller") %>'>
|
103
|
-
/brewery/<span class='params'>fullers</span>
|
104
|
-
</a>
|
105
|
-
</code>
|
106
|
-
</td>
|
107
|
-
</tr>
|
108
|
-
|
109
|
-
<tr>
|
110
|
-
<td>
|
111
|
-
<code>
|
112
|
-
<a href='<%= url("/brewery/brooklyn") %>'>
|
113
|
-
/brewery/<span class='params'>brooklyn</span>
|
114
|
-
</a>
|
115
|
-
</code>
|
116
|
-
</td>
|
117
|
-
</tr>
|
118
|
-
|
119
|
-
<tr>
|
120
|
-
<td>
|
121
|
-
<code>
|
122
|
-
<a href='<%= url("/brewery/gmodelo") %>'>
|
123
|
-
/brewery/<span class='params'>gmodelo</span>
|
124
|
-
</a>
|
125
|
-
</code>
|
126
|
-
</td>
|
127
|
-
</tr>
|
128
|
-
|
129
|
-
<tr>
|
130
|
-
<td>
|
131
|
-
<code>
|
132
|
-
<a href='<%= url("/brewery/ottakringer") %>'>
|
133
|
-
/brewery/<span class='params'>ottakringer</span>
|
134
|
-
</a>
|
135
|
-
</code>
|
136
|
-
</td>
|
137
|
-
</tr>
|
138
|
-
|
139
|
-
</table>
|
140
|
-
|
141
|
-
<h3>Get random brewery <code>/brewery/<span class='params'>rand</span></code></h3>
|
142
|
-
|
143
|
-
<table>
|
144
|
-
<tr>
|
145
|
-
<td>
|
146
|
-
<code>
|
147
|
-
<a href='<%= url("/brewery/rand") %>'>
|
148
|
-
/brewery/<span class='params'>rand</span>
|
149
|
-
</a>
|
150
|
-
</code>
|
151
|
-
</td>
|
152
|
-
</tr>
|
153
|
-
</table>
|
154
|
-
|
155
|
-
|
156
|
-
<%= erb :'_debug' %>
|
@@ -1,15 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<meta charset='UTF-8'>
|
5
|
-
<title>beer.db web service / HTTP JSON API</title>
|
6
|
-
<link href="<%= url('/style.css') %>" rel='stylesheet'>
|
7
|
-
</head>
|
8
|
-
<body>
|
9
|
-
|
10
|
-
<%= yield %>
|
11
|
-
|
12
|
-
<%= erb :'_version' %>
|
13
|
-
|
14
|
-
</body>
|
15
|
-
</html>
|
data/lib/beerdb/server.rb
DELETED
@@ -1,248 +0,0 @@
|
|
1
|
-
######
|
2
|
-
# NB: use rackup to startup Sinatra service (see config.ru)
|
3
|
-
#
|
4
|
-
# e.g. config.ru:
|
5
|
-
# require './boot'
|
6
|
-
# run BeerDb::Server
|
7
|
-
|
8
|
-
|
9
|
-
# 3rd party libs/gems
|
10
|
-
|
11
|
-
require 'sinatra/base'
|
12
|
-
|
13
|
-
|
14
|
-
# our own code
|
15
|
-
|
16
|
-
|
17
|
-
# require 'logutils'
|
18
|
-
# require 'logutils/db'
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
module BeerDb
|
23
|
-
|
24
|
-
class Server < Sinatra::Base
|
25
|
-
|
26
|
-
def self.banner
|
27
|
-
"beerdb-service #{BeerDb::VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}] on Sinatra/#{Sinatra::VERSION} (#{ENV['RACK_ENV']})"
|
28
|
-
end
|
29
|
-
|
30
|
-
PUBLIC_FOLDER = "#{BeerDb.root}/lib/beerdb/server/public"
|
31
|
-
VIEWS_FOLDER = "#{BeerDb.root}/lib/beerdb/server/views"
|
32
|
-
|
33
|
-
puts "[debug] beerdb-service - setting public folder to: #{PUBLIC_FOLDER}"
|
34
|
-
puts "[debug] beerdb-service - setting views folder to: #{VIEWS_FOLDER}"
|
35
|
-
|
36
|
-
set :public_folder, PUBLIC_FOLDER # set up the static dir (with images/js/css inside)
|
37
|
-
set :views, VIEWS_FOLDER # set up the views dir
|
38
|
-
|
39
|
-
set :static, true # set up static file routing
|
40
|
-
|
41
|
-
#####################
|
42
|
-
# Models
|
43
|
-
|
44
|
-
include BeerDb::Models
|
45
|
-
|
46
|
-
##################
|
47
|
-
# Helpers
|
48
|
-
#
|
49
|
-
# NB: helpers are just instance methods! no need in modular apps to use
|
50
|
-
# helpers do
|
51
|
-
# <code>
|
52
|
-
# end
|
53
|
-
|
54
|
-
def path_prefix
|
55
|
-
request.env['SCRIPT_NAME']
|
56
|
-
end
|
57
|
-
|
58
|
-
##############################################
|
59
|
-
# Controllers / Routing / Request Handlers
|
60
|
-
|
61
|
-
get '/' do
|
62
|
-
erb :index
|
63
|
-
end
|
64
|
-
|
65
|
-
get '/notes/:key' do |key|
|
66
|
-
|
67
|
-
puts " handle GET /notes/:key"
|
68
|
-
|
69
|
-
if ['l', 'latest'].include?( key )
|
70
|
-
# get latest tasting notes (w/ ratings)
|
71
|
-
notes = Note.order( 'updated_at DESC' ).limit(10).all
|
72
|
-
elsif ['h', 'hot'].include?( key )
|
73
|
-
# get latest tasting notes (w/ ratings)
|
74
|
-
# fix: use log algo for "hotness" - for now same as latest
|
75
|
-
notes = Note.order( 'updated_at DESC' ).limit(10).all
|
76
|
-
elsif ['t', 'top'].include?( key )
|
77
|
-
notes = Note.order( 'rating DESC, updated_at DESC' ).limit(10).all
|
78
|
-
else
|
79
|
-
### todo: move to /u/:key/notes ??
|
80
|
-
|
81
|
-
# assume it's a user key
|
82
|
-
user = User.find_by_key!( key )
|
83
|
-
notes = Note.order( 'rating DESC, updated_at DESC' ).where( user_id: user.id ).all
|
84
|
-
end
|
85
|
-
|
86
|
-
data = []
|
87
|
-
notes.each do |note|
|
88
|
-
data << {
|
89
|
-
beer: { title: note.beer.title,
|
90
|
-
key: note.beer.key },
|
91
|
-
user: { name: note.user.name,
|
92
|
-
key: note.user.key },
|
93
|
-
rating: note.rating,
|
94
|
-
comments: note.comments,
|
95
|
-
place: note.place,
|
96
|
-
created_at: note.created_at,
|
97
|
-
updated_at: note.updated_at
|
98
|
-
}
|
99
|
-
end
|
100
|
-
|
101
|
-
json_or_jsonp( data.to_json )
|
102
|
-
end
|
103
|
-
|
104
|
-
|
105
|
-
get '/notes' do
|
106
|
-
if params[:method] == 'post'
|
107
|
-
|
108
|
-
puts " handle GET /notes?method=post"
|
109
|
-
|
110
|
-
user = User.find_by_key!( params[:user] )
|
111
|
-
beer = Beer.find_by_key!( params[:beer] )
|
112
|
-
rating = params[:rating].to_i
|
113
|
-
place = params[:place] # assumes for now a string or nil / pass through as is
|
114
|
-
|
115
|
-
attribs = {
|
116
|
-
user_id: user.id,
|
117
|
-
beer_id: beer.id,
|
118
|
-
rating: rating,
|
119
|
-
place: place
|
120
|
-
}
|
121
|
-
|
122
|
-
note = Note.new
|
123
|
-
note.update_attributes!( attribs )
|
124
|
-
end
|
125
|
-
|
126
|
-
json_or_jsonp( { status: 'ok' }.to_json )
|
127
|
-
end
|
128
|
-
|
129
|
-
|
130
|
-
get '/drinks/:key' do |key|
|
131
|
-
|
132
|
-
puts " handle GET /drinks/:key"
|
133
|
-
|
134
|
-
if ['l', 'latest'].include?( key )
|
135
|
-
# get latest +1 drinks
|
136
|
-
## todo: order by drunk_at??
|
137
|
-
drinks = Drink.order( 'updated_at DESC' ).limit(10).all
|
138
|
-
else
|
139
|
-
### todo: move to /u/:key/drinks ??
|
140
|
-
|
141
|
-
# assume it's a user key
|
142
|
-
user = User.find_by_key!( key )
|
143
|
-
drinks = Drink.order( 'updated_at DESC' ).where( user_id: user.id ).all
|
144
|
-
end
|
145
|
-
|
146
|
-
data = []
|
147
|
-
drinks.each do |drink|
|
148
|
-
data << {
|
149
|
-
beer: { title: drink.beer.title,
|
150
|
-
key: drink.beer.key },
|
151
|
-
user: { name: drink.user.name,
|
152
|
-
key: drink.user.key },
|
153
|
-
place: drink.place,
|
154
|
-
drunk_at: drink.drunk_at,
|
155
|
-
created_at: drink.created_at,
|
156
|
-
updated_at: drink.updated_at
|
157
|
-
}
|
158
|
-
end
|
159
|
-
|
160
|
-
json_or_jsonp( data.to_json )
|
161
|
-
end
|
162
|
-
|
163
|
-
|
164
|
-
get '/drinks' do
|
165
|
-
if params[:method] == 'post'
|
166
|
-
|
167
|
-
puts " handle GET /drinks?method=post"
|
168
|
-
|
169
|
-
user = User.find_by_key!( params[:user] )
|
170
|
-
beer = Beer.find_by_key!( params[:beer] )
|
171
|
-
place = params[:place] # assumes for now a string or nil / pass through as is
|
172
|
-
|
173
|
-
attribs = {
|
174
|
-
user_id: user.id,
|
175
|
-
beer_id: beer.id,
|
176
|
-
place: place
|
177
|
-
}
|
178
|
-
|
179
|
-
drink = Drink.new
|
180
|
-
drink.update_attributes!( attribs )
|
181
|
-
end
|
182
|
-
|
183
|
-
json_or_jsonp( { status: 'ok' }.to_json )
|
184
|
-
end
|
185
|
-
|
186
|
-
|
187
|
-
get '/d*' do
|
188
|
-
erb :debug
|
189
|
-
end
|
190
|
-
|
191
|
-
## todo: add support for beer of the day, of the week, of the month, of the year?
|
192
|
-
## /beer/day|d | /beer/month|m | beer/year|y ??
|
193
|
-
##
|
194
|
-
## add table daily_beer, weekly_beer, etc. ??
|
195
|
-
|
196
|
-
get '/beer/:key' do |key|
|
197
|
-
|
198
|
-
if ['r', 'rnd', 'rand', 'random'].include?( key )
|
199
|
-
# special key for random beer
|
200
|
-
# NB: use .first (otherwise will get ActiveRelation not Model)
|
201
|
-
beer = Beer.rnd.first
|
202
|
-
else
|
203
|
-
beer = Beer.find_by_key!( key )
|
204
|
-
end
|
205
|
-
|
206
|
-
json_or_jsonp( beer.as_json_v2 )
|
207
|
-
end
|
208
|
-
|
209
|
-
|
210
|
-
get '/brewery/:key' do |key|
|
211
|
-
|
212
|
-
if ['r', 'rnd', 'rand', 'random'].include?( key )
|
213
|
-
# special key for random brewery
|
214
|
-
# NB: use .first (otherwise will get ActiveRelation not Model)
|
215
|
-
brewery = Brewery.rnd.first
|
216
|
-
else
|
217
|
-
brewery = Brewery.find_by_key!( key )
|
218
|
-
end
|
219
|
-
|
220
|
-
json_or_jsonp( brewery.as_json_v2 )
|
221
|
-
end
|
222
|
-
|
223
|
-
|
224
|
-
### helper for json or jsonp response (depending on callback para)
|
225
|
-
|
226
|
-
private
|
227
|
-
def json_or_jsonp( json )
|
228
|
-
callback = params.delete('callback')
|
229
|
-
response = ''
|
230
|
-
|
231
|
-
if callback
|
232
|
-
content_type :js
|
233
|
-
response = "#{callback}(#{json})"
|
234
|
-
else
|
235
|
-
content_type :json
|
236
|
-
response = json
|
237
|
-
end
|
238
|
-
|
239
|
-
response
|
240
|
-
end
|
241
|
-
|
242
|
-
|
243
|
-
end # class Server
|
244
|
-
end # module BeerDb
|
245
|
-
|
246
|
-
|
247
|
-
# say hello
|
248
|
-
puts BeerDb::Server.banner
|