beerdb 0.9.4 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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