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.
@@ -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