lita-onewheel-apex-bar 0.0.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4afe2e871571c98ddaef57b567b05c0da5bf3059
4
+ data.tar.gz: a0a549cbdc53ed6a53e220c27b2147c2ff37efa3
5
+ SHA512:
6
+ metadata.gz: 6e9039d1bb645c76c0369f9f0f90ad740dad46b5e943037583a7e0370e5224ddfe746edd86375fa6a015857eb3e69d9564e86c4d9e25297cbfd9e59aab8b6e88
7
+ data.tar.gz: bb3c7a1c8e62e21405d8918b794d37149e4d623e5dddebdd2cf1f36ad6621b34e4d33eea693c06ec7c53d923a5249cde212dd72a08bb0013f472ee93beb9cea6
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea
19
+ lita_config.rb
data/.travis.yml ADDED
@@ -0,0 +1,16 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.2.4
5
+ - 2.3.0
6
+
7
+ script: bundle exec rspec -fp spec
8
+
9
+ # Travis CI has an outdated version of bundler on older versions of ruby.
10
+ # See bundler/bundler#3558 for more information
11
+ #before_install:
12
+ # - gem update --system
13
+ # - gem update bundler
14
+
15
+ services:
16
+ - redis-server
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ # For local development and base testing
6
+ # gem 'lita-onewheel-beer-base', :github => 'onewheelskyward/lita-onewheel-beer-base', branch: :master
data/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # lita-onewheel-apex-bar
2
+
3
+ [![Build Status](https://travis-ci.org/onewheelskyward/lita-onewheel-apex-bar.png?branch=master)](https://travis-ci.org/onewheelskyward/lita-onewheel-apex-bar)
4
+ [![Coverage Status](https://coveralls.io/repos/onewheelskyward/lita-onewheel-apex-bar/badge.png)](https://coveralls.io/r/onewheelskyward/lita-onewheel-apex-bar)
5
+
6
+ Searches Apex Bar's draft list for data and displays it in IRC.
7
+ http://apexbar.com/menu
8
+
9
+ ## Installation
10
+
11
+ Add lita-onewheel-apex-bar to your Lita instance's Gemfile:
12
+
13
+ ``` ruby
14
+ gem 'lita-onewheel-apex-bar'
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ apex
20
+
21
+ apex 4
22
+
23
+ apex nitro
24
+
25
+ apex >(=)5%
26
+
27
+ apex <(=)$5
28
+
29
+ apex roulette|random
30
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,12 @@
1
+ require 'lita'
2
+
3
+ Lita.load_locales Dir[File.expand_path(
4
+ File.join('..', '..', 'locales', '*.yml'), __FILE__
5
+ )]
6
+
7
+ require 'lita/handlers/onewheel_apex_bar'
8
+
9
+ Lita::Handlers::OnewheelApexBar.template_root File.expand_path(
10
+ File.join('..', '..', 'templates'),
11
+ __FILE__
12
+ )
@@ -0,0 +1,174 @@
1
+ require 'rest-client'
2
+ require 'nokogiri'
3
+ require 'sanitize'
4
+ require 'lita-onewheel-beer-base'
5
+
6
+ module Lita
7
+ module Handlers
8
+ class OnewheelApexBar < OnewheelBeerBase
9
+ route /^apex$/i,
10
+ :taps_list,
11
+ command: true,
12
+ help: {'taps' => 'Display the current Apex Bar taps.'}
13
+
14
+ route /^apex ([\w ]+)$/i,
15
+ :taps_deets,
16
+ command: true,
17
+ help: {'taps 4' => 'Display the tap 4 deets, including prices.'}
18
+
19
+ route /^apex ([<>=\w.\s]+)%$/i,
20
+ :taps_by_abv,
21
+ command: true,
22
+ help: {'taps >4%' => 'Display beers over 4% ABV.'}
23
+
24
+ route /^apex ([<>=\$\w.\s]+)$/i,
25
+ :taps_by_price,
26
+ command: true,
27
+ help: {'taps <$5' => 'Display beers under $5.'}
28
+
29
+ route /^apex (roulette|random|rand|ran|ra|r)$/i,
30
+ :taps_by_random,
31
+ command: true,
32
+ help: {'taps roulette' => 'Can\'t decide? Let me do it for you!'}
33
+
34
+ route /^apexabvlow$/i,
35
+ :taps_low_abv,
36
+ command: true,
37
+ help: {'tapslow' => 'Show me the lowest abv keg.'}
38
+
39
+ route /^apexabvhigh$/i,
40
+ :taps_high_abv,
41
+ command: true,
42
+ help: {'tapslow' => 'Show me the highest abv keg.'}
43
+
44
+ def send_response(tap, datum, response)
45
+ reply = "Apex tap #{tap}) #{get_tap_type_text(datum[:type])}"
46
+ # reply += "#{datum[:brewery]} "
47
+ reply += "#{datum[:name]} "
48
+ # reply += "- #{datum[:desc]}, "
49
+ # reply += "Served in a #{datum[1]['glass']} glass. "
50
+ # reply += "#{get_display_prices datum[:prices]}, "
51
+ # reply += "#{datum[:remaining]}"
52
+
53
+ Lita.logger.info "send_response: Replying with #{reply}"
54
+
55
+ response.reply reply
56
+ end
57
+
58
+ def get_display_prices(prices)
59
+ price_array = []
60
+ prices.each do |p|
61
+ price_array.push "#{p[:size]} - $#{p[:cost]}"
62
+ end
63
+ price_array.join ' | '
64
+ end
65
+
66
+ def get_source
67
+ Lita.logger.debug 'get_source started'
68
+ unless (response = redis.get('page_response'))
69
+ Lita.logger.info 'No cached result found, fetching.'
70
+ response = RestClient.get('http://apexbar.com/menu')
71
+ redis.setex('page_response', 1800, response)
72
+ end
73
+ parse_response response
74
+ end
75
+
76
+ # This is the worker bee- decoding the html into our "standard" document.
77
+ # Future implementations could simply override this implementation-specific
78
+ # code to help this grow more widely.
79
+ def parse_response(response)
80
+ Lita.logger.debug 'parse_response started.'
81
+ gimme_what_you_got = {}
82
+ noko = Nokogiri.HTML response
83
+ noko.css('table.table tbody tr').each_with_index do |beer_node, index|
84
+ # gimme_what_you_got
85
+ tap_name = (index + 1).to_s
86
+
87
+ # brewery = beer_node.css('td')[0].children.to_s
88
+ beer_name = beer_node.css('td')[0].children.to_s
89
+ # beer_desc = get_beer_desc(beer_node)
90
+ abv = beer_node.css('td')[4].children.to_s
91
+ # full_text_search = "#{tap.sub /\d+/, ''} #{brewery} #{beer_name} #{beer_desc.to_s.gsub /\d+\.*\d*%*/, ''}"
92
+ # prices = get_prices(beer_node)
93
+
94
+ gimme_what_you_got[tap_name] = {
95
+ # type: tap_type,
96
+ # remaining: remaining,
97
+ # brewery: brewery.to_s,
98
+ name: beer_name.to_s,
99
+ # desc: beer_desc.to_s,
100
+ abv: abv.to_f,
101
+ # prices: prices,
102
+ # search: full_text_search
103
+ }
104
+ end
105
+ puts gimme_what_you_got.inspect
106
+ gimme_what_you_got
107
+ end
108
+
109
+ def get_abv(beer_desc)
110
+ if (abv_matches = beer_desc.match(/\d+\.\d+%/))
111
+ abv_matches.to_s.sub '%', ''
112
+ end
113
+ end
114
+
115
+ # Return the desc of the beer, "Amber ale 6.9%"
116
+ def get_beer_desc(noko)
117
+ beer_desc = ''
118
+ if (beer_desc_matchdata = noko.to_s.gsub(/\n/, '').match(/(<br\s*\/*>)(.+%) /))
119
+ beer_desc = beer_desc_matchdata[2].gsub(/\s+/, ' ').strip
120
+ end
121
+ beer_desc
122
+ end
123
+
124
+ # Get the brewery from the node, return it or blank.
125
+ def get_brewery(noko)
126
+ brewery = ''
127
+ if (node = noko.css('span a').first)
128
+ brewery = node.children.to_s.gsub(/\n/, '')
129
+ brewery.gsub! /RBBA/, ''
130
+ brewery.strip!
131
+ end
132
+ brewery
133
+ end
134
+
135
+ # Returns ...
136
+ # There are a bunch of hidden html fields that get stripped after sanitize.
137
+ def get_prices(noko)
138
+ prices_str = noko.css('div#prices').children.to_s.strip
139
+ prices = Sanitize.clean(prices_str)
140
+ .gsub(/We're Sorry/, '')
141
+ .gsub(/Inventory Restriction/, '')
142
+ .gsub(/Inventory Failure/, '')
143
+ .gsub('Success!', '')
144
+ .gsub(/\s+/, ' ')
145
+ .strip
146
+ price_points = prices.split(/\s\|\s/)
147
+ prices_array = []
148
+ price_points.each do |price|
149
+ size = price.match /\d+(oz|cl)/
150
+ dollars = price.match(/\$\d+\.*\d*/).to_s.sub('$', '')
151
+ crowler = price.match ' Crowler'
152
+ size = size.to_s + crowler.to_s
153
+ p = {size: size, cost: dollars}
154
+ prices_array.push p
155
+ end
156
+ prices_array
157
+ end
158
+
159
+ # Returns 1, 2, Cask 3, Nitro 4...
160
+ def get_tap_name(noko)
161
+ noko.css('span')
162
+ .first
163
+ .children
164
+ .first
165
+ .to_s
166
+ .match(/[\w ]+\:/)
167
+ .to_s
168
+ .sub(/\:$/, '')
169
+ end
170
+
171
+ Lita.register_handler(self)
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,31 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = 'lita-onewheel-apex-bar'
3
+ spec.version = '0.0.0'
4
+ spec.authors = ['Andrew Kreps']
5
+ spec.email = ['andrew.kreps@gmail.com']
6
+ spec.description = %q{Lita interface to Apex Bar's listings.}
7
+ spec.summary = %q{See above.}
8
+ spec.homepage = 'https://github.com/onewheelskyward/lita-onewheel-apex-bar'
9
+ spec.license = 'MIT'
10
+ spec.metadata = { 'lita_plugin_type' => 'handler' }
11
+
12
+ spec.files = `git ls-files`.split($/)
13
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
14
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
+ spec.require_paths = ['lib']
16
+
17
+ spec.add_runtime_dependency 'lita', '~> 4.7'
18
+ spec.add_runtime_dependency 'rest-client', '~> 1.8'
19
+ spec.add_runtime_dependency 'nokogiri', '~> 1.6'
20
+ spec.add_runtime_dependency 'sanitize', '~> 4.0'
21
+ spec.add_runtime_dependency 'lita-onewheel-beer-base', '~> 1'
22
+
23
+ spec.add_development_dependency 'bundler', '~> 1.3'
24
+
25
+ # spec.add_development_dependency 'pry-byebug', '~> 3.1'
26
+ spec.add_development_dependency 'rake', '~> 10.4'
27
+ spec.add_development_dependency 'rack-test', '~> 0.6'
28
+ spec.add_development_dependency 'rspec', '~> 3.0'
29
+ spec.add_development_dependency 'simplecov', '~> 0.10'
30
+ spec.add_development_dependency 'coveralls', '~> 0.8'
31
+ end
@@ -0,0 +1,689 @@
1
+
2
+ <!DOCTYPE html>
3
+ <html lang="en" class="no-js">
4
+
5
+
6
+ <head>
7
+ <meta charset="utf-8">
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
10
+ <title>Apex Bar PDX</title>
11
+ <link href="/static/css/bootstrap-2.2.1-cyborg.min.css" rel="stylesheet" />
12
+ <link href="/static/css/bootstrap-responsive-2.2.2.min.css" rel="stylesheet" />
13
+ <link rel="stylesheet" href="/static/css/font-awesome.min.css">
14
+ <link href="/static/css/main.css" rel="stylesheet" />
15
+ <link rel="shortcut icon" href="/static/img/favicon.ico" />
16
+
17
+ <style type="text/css">
18
+ table.table { width: auto; }
19
+ .marketing .span12 {margin-top: 90px; }
20
+ .table th {font-weight: bolder; color: #FCFCFC; }
21
+ .table td {font-weight: normal;}
22
+
23
+ .table-striped tbody > tr:nth-child(odd) > td,
24
+ .table-striped tbody > tr:nth-child(odd) > th {
25
+ background-color: #2B2828;
26
+ }
27
+ </style>
28
+
29
+ <script src="/static/js/lib/modernizr-2.6.2.min.js"></script>
30
+ <!-- defer-incapable JS block -->
31
+ </head>
32
+ <body>
33
+ <div id="header">
34
+ <!--suppress HtmlUnknownTarget -->
35
+ <div class="navbar-wrapper">
36
+ <div class="container">
37
+
38
+ <!-- Desktop/Tablet version -->
39
+ <div class="navbar navbar-inverse hidden-phone">
40
+ <div class="navbar-inner">
41
+ <a class="brand" href="/">APEX</a><a class="brand" href="/" style="font-size: 120%; font-style: italic">A Beer Bar</a>
42
+ <ul class="nav pull-right">
43
+
44
+ <li>
45
+ <a href="/faq">FAQ</a>
46
+ </li>
47
+ <!-- <li>
48
+ <a href="/bottlemenu">Bottle Menu</a>
49
+ </li> -->
50
+ <li>
51
+ <a href="/menu">Live Beer Menu</a>
52
+ </li>
53
+ </ul>
54
+ </div><!-- /.navbar .container -->
55
+ </div><!-- /.navbar-inner -->
56
+
57
+ <!-- phone version -->
58
+ <div class="navbar navbar-inverse visible-phone">
59
+ <div class="navbar-inner" style="font-size: 90%">
60
+ <a class="brand" href="/" style="font-size: 180%; font-style: normal">APEX</a>
61
+ <a class="brand" href="/" style="font-size: 150%; font-style: italic">A Beer Bar</a>
62
+ <ul class="nav pull-right">
63
+
64
+ <li>
65
+ <a href="/faq">FAQ</a>
66
+ </li>
67
+ <!-- <li>
68
+ <a href="/bottlemenu">Bottle Menu</a>
69
+ </li> -->
70
+ <li>
71
+ <a href="/menu">Live Beer Menu</a>
72
+ </li>
73
+ </ul>
74
+ </div><!-- /.navbar .container -->
75
+ </div><!-- /.navbar-inner -->
76
+
77
+
78
+ </div>
79
+ </div><!-- /navbar -->
80
+
81
+
82
+ </div>
83
+ <div class="container" id="maincontent">
84
+
85
+
86
+
87
+ <div id="body_content">
88
+
89
+
90
+ <div class="container marketing">
91
+ <div class="row-fluid">
92
+ <div class="span12">
93
+ <h2>Live Beers on Tap</h2>
94
+ <table class="table table-striped table-bordered table-hover table-condensed">
95
+ <thead>
96
+ <tr>
97
+ <th class="span4">Name</th>
98
+ <th class="span1">Price</th>
99
+ <th class="span4">Brewery</th>
100
+ <th class="span1">Origin</th>
101
+ <th class="span1">ABV</th>
102
+ <th class="span1">Size</th>
103
+ </tr>
104
+ </thead>
105
+ <tbody>
106
+
107
+ <tr onclick="window.open('http://www.ratebeer.com/beer/bayreuther-aktien-original/44444/5328/','_blank');">
108
+
109
+ <td>Aktien Helles Lager</td>
110
+
111
+ <td>$5</td>
112
+ <td>Bayreuther</td>
113
+ <td>GER</td>
114
+ <td>5.3</td>
115
+ <td>0.5L</td>
116
+ </tr>
117
+
118
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/23066/63088','_blank');">
119
+
120
+ <td>Armored Fist - Big,Black&amp;Hoppy</td>
121
+
122
+ <td>$5</td>
123
+ <td>Boneyard</td>
124
+ <td>BND</td>
125
+ <td>10</td>
126
+ <td>12oz</td>
127
+ </tr>
128
+
129
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/463/14719/','_blank');">
130
+
131
+ <td>Barrel Aged Old Thunderpussy</td>
132
+
133
+ <td>$5</td>
134
+ <td>Magnolia</td>
135
+ <td>CA</td>
136
+ <td>10.8</td>
137
+ <td>6oz</td>
138
+ </tr>
139
+
140
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/863/22790','_blank');">
141
+
142
+ <td>Blind Pig - IPA</td>
143
+
144
+ <td>$6</td>
145
+ <td>Russian River</td>
146
+ <td>CA</td>
147
+ <td>6.1</td>
148
+ <td>16oz</td>
149
+ </tr>
150
+
151
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/463/4647/','_blank');">
152
+
153
+ <td>Blue Bell Bitter </td>
154
+
155
+ <td>$5</td>
156
+ <td>Magnolia</td>
157
+ <td>CA</td>
158
+ <td>5.4</td>
159
+ <td>16oz</td>
160
+ </tr>
161
+
162
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/23066/59798/','_blank');">
163
+
164
+ <td>Bone-A-Fide - Pale</td>
165
+
166
+ <td>$5</td>
167
+ <td>Boneyard</td>
168
+ <td>BND</td>
169
+ <td>5.5</td>
170
+ <td>16oz</td>
171
+ </tr>
172
+
173
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/23200/159885/','_blank');">
174
+
175
+ <td>Breaking Bud - IPA</td>
176
+
177
+ <td>$5</td>
178
+ <td>Knee Deep</td>
179
+ <td>CA</td>
180
+ <td>6.5</td>
181
+ <td>16oz</td>
182
+ </tr>
183
+
184
+ <tr onclick="window.open('http://yearinbeer.tumblr.com/post/765411490/hamms-premium','_blank');">
185
+
186
+ <td>Cheap, cold</td>
187
+
188
+ <td>$3</td>
189
+ <td>Hamm&#39;s</td>
190
+ <td>USA</td>
191
+ <td>4.7</td>
192
+ <td>16oz</td>
193
+ </tr>
194
+
195
+ <tr onclick="window.open('https://untappd.com/b/two-rivers-cider-company-pomegranate-cider/30498','_blank');">
196
+
197
+ <td>Cider- Huckleberry</td>
198
+
199
+ <td>$5</td>
200
+ <td>Two Rivers</td>
201
+ <td>CA</td>
202
+ <td>5</td>
203
+ <td>16oz</td>
204
+ </tr>
205
+
206
+ <tr onclick="window.open('https://untappd.com/b/cider-riot-never-give-an-inch/749700','_blank');">
207
+
208
+ <td>Cider- NeverGiveAnInch -Rosé </td>
209
+
210
+ <td>$5</td>
211
+ <td>Cider Riot!</td>
212
+ <td>PDX</td>
213
+ <td>6.9</td>
214
+ <td>16oz</td>
215
+ </tr>
216
+
217
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/223/50772','_blank');">
218
+
219
+ <td>Cuvée des Jacobins Rouge*</td>
220
+
221
+ <td>$5</td>
222
+ <td>Bockor</td>
223
+ <td>BEL</td>
224
+ <td>5.5</td>
225
+ <td>6oz</td>
226
+ </tr>
227
+
228
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/463/122803/','_blank');">
229
+
230
+ <td>Delilah Jones &#39;15 - StrongRye</td>
231
+
232
+ <td>$5</td>
233
+ <td>Magnolia</td>
234
+ <td>CA</td>
235
+ <td>10.8</td>
236
+ <td>6oz</td>
237
+ </tr>
238
+
239
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/3120/27604','_blank');">
240
+
241
+ <td>Duet - IPA</td>
242
+
243
+ <td>$5</td>
244
+ <td>Alpine</td>
245
+ <td>CA</td>
246
+ <td>7</td>
247
+ <td>16oz</td>
248
+ </tr>
249
+
250
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/192/210034/','_blank');">
251
+
252
+ <td>Golden - Herbs,Seeds,Spelt</td>
253
+
254
+ <td>$5</td>
255
+ <td>NewBelg&amp;HofTenDormaal</td>
256
+ <td>CO</td>
257
+ <td>7</td>
258
+ <td>12oz</td>
259
+ </tr>
260
+
261
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/817/68049','_blank');">
262
+
263
+ <td>Grapefruit Radler</td>
264
+
265
+ <td>$5</td>
266
+ <td>Stiegl</td>
267
+ <td>AUT</td>
268
+ <td>2.5</td>
269
+ <td>0.5L</td>
270
+ </tr>
271
+
272
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/5077/101316','_blank');">
273
+
274
+ <td>Handtruck - Pale</td>
275
+
276
+ <td>$5</td>
277
+ <td>Barley Brown&#39;s</td>
278
+ <td>OR</td>
279
+ <td>5.5</td>
280
+ <td>16oz</td>
281
+ </tr>
282
+
283
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/5077/61448/','_blank');">
284
+
285
+ <td>Head Shake - IIPA</td>
286
+
287
+ <td>$5</td>
288
+ <td>Barley Brown&#39;s</td>
289
+ <td>OR</td>
290
+ <td>8.75</td>
291
+ <td>12oz</td>
292
+ </tr>
293
+
294
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/23066/72750','_blank');">
295
+
296
+ <td>Hop Venom - IIPA</td>
297
+
298
+ <td>$5</td>
299
+ <td>Boneyard</td>
300
+ <td>BND</td>
301
+ <td>9</td>
302
+ <td>12oz</td>
303
+ </tr>
304
+
305
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/39/133/','_blank');">
306
+
307
+ <td>Jahrhundert - Export Lager</td>
308
+
309
+ <td>$5</td>
310
+ <td>Ayinger</td>
311
+ <td>GER</td>
312
+ <td>5.5</td>
313
+ <td>0.5L</td>
314
+ </tr>
315
+
316
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/463/17590/','_blank');">
317
+
318
+ <td>Kalifornia Kolsch</td>
319
+
320
+ <td>$5</td>
321
+ <td>Magnolia</td>
322
+ <td>CA</td>
323
+ <td>4.8</td>
324
+ <td>16oz</td>
325
+ </tr>
326
+
327
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/252/760','_blank');">
328
+
329
+ <td>Kristallweissbier</td>
330
+
331
+ <td>$6</td>
332
+ <td>Weihenstephan</td>
333
+ <td>GER</td>
334
+ <td>5.4</td>
335
+ <td>0.5L</td>
336
+ </tr>
337
+
338
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/192/26541','_blank');">
339
+
340
+ <td>Le Terroir*</td>
341
+
342
+ <td>$6</td>
343
+ <td>New Belgium</td>
344
+ <td>CO</td>
345
+ <td>7.5</td>
346
+ <td>6oz</td>
347
+ </tr>
348
+
349
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/23200/159480/','_blank');">
350
+
351
+ <td>Lupulin River - IPA</td>
352
+
353
+ <td>$6</td>
354
+ <td>Knee Deep</td>
355
+ <td>CA</td>
356
+ <td>8</td>
357
+ <td>16oz</td>
358
+ </tr>
359
+
360
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/585/2637','_blank');">
361
+
362
+ <td>Maisel&#39;s Weisse - Hefeweizen </td>
363
+
364
+ <td>$5</td>
365
+ <td>Gebruder Maisel</td>
366
+ <td>GER</td>
367
+ <td>5.4</td>
368
+ <td>0.5L</td>
369
+ </tr>
370
+
371
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/173/945/','_blank');">
372
+
373
+ <td>Nitro- Adam -Drinking Tobacco</td>
374
+
375
+ <td>$6</td>
376
+ <td>Hair of the Dog</td>
377
+ <td>PDX</td>
378
+ <td>10</td>
379
+ <td>12oz</td>
380
+ </tr>
381
+
382
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/1141/10330','_blank');">
383
+
384
+ <td>Nitro- Aphrodisiaque - Stout </td>
385
+
386
+ <td>$6</td>
387
+ <td>Dieu du Ciel!</td>
388
+ <td>CAN</td>
389
+ <td>6.5</td>
390
+ <td>12oz</td>
391
+ </tr>
392
+
393
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/112/412/','_blank');">
394
+
395
+ <td>Nitro- Old Rasputin - RIS</td>
396
+
397
+ <td>$4</td>
398
+ <td>North Coast</td>
399
+ <td>CA</td>
400
+ <td>9</td>
401
+ <td>12oz</td>
402
+ </tr>
403
+
404
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/112/410/','_blank');">
405
+
406
+ <td>Nitro- Red Seal - Red</td>
407
+
408
+ <td>$5</td>
409
+ <td>North Coast</td>
410
+ <td>CA</td>
411
+ <td>5.4</td>
412
+ <td>16oz</td>
413
+ </tr>
414
+
415
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/130/101458','_blank');">
416
+
417
+ <td>Nitro- Shake - Choco Porter</td>
418
+
419
+ <td>$8</td>
420
+ <td>Boulder</td>
421
+ <td>CO</td>
422
+ <td>5.9</td>
423
+ <td>1L</td>
424
+ </tr>
425
+
426
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/209/754','_blank');">
427
+
428
+ <td>Nitro- Stout</td>
429
+
430
+ <td>$4</td>
431
+ <td>Guinness</td>
432
+ <td>IRL</td>
433
+ <td>4.1</td>
434
+ <td>20oz</td>
435
+ </tr>
436
+
437
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/23066/70013','_blank');">
438
+
439
+ <td>Notorious - IIIPA</td>
440
+
441
+ <td>$5</td>
442
+ <td>Boneyard</td>
443
+ <td>BND</td>
444
+ <td>11.5</td>
445
+ <td>6oz</td>
446
+ </tr>
447
+
448
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/29415/95513/','_blank');">
449
+
450
+ <td>Off Leash - NW Session Ale</td>
451
+
452
+ <td>$5</td>
453
+ <td>Crux</td>
454
+ <td>BND</td>
455
+ <td>4.5</td>
456
+ <td>16oz</td>
457
+ </tr>
458
+
459
+ <tr onclick="window.open('http://www.ratebeer.com/beer/rogue-old-crustacean-barleywine/594/','_blank');">
460
+
461
+ <td>Old Crustacean &#39;12-Barleywine</td>
462
+
463
+ <td>$4</td>
464
+ <td>Rogue</td>
465
+ <td>OR</td>
466
+ <td>11.5</td>
467
+ <td>6oz</td>
468
+ </tr>
469
+
470
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/5077/81755','_blank');">
471
+
472
+ <td>Pallet Jack - IPA</td>
473
+
474
+ <td>$6</td>
475
+ <td>Barley Brown&#39;s</td>
476
+ <td>OR</td>
477
+ <td>7</td>
478
+ <td>16oz</td>
479
+ </tr>
480
+
481
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/30356/145616/','_blank');">
482
+
483
+ <td>Phantasmagoria - IPA</td>
484
+
485
+ <td>$5</td>
486
+ <td>Prairie</td>
487
+ <td>OK</td>
488
+ <td>8</td>
489
+ <td>12oz</td>
490
+ </tr>
491
+
492
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/2974/799/','_blank');">
493
+
494
+ <td>Pilsner</td>
495
+
496
+ <td>$5</td>
497
+ <td>Radeberger</td>
498
+ <td>GER</td>
499
+ <td>4.8</td>
500
+ <td>0.5L</td>
501
+ </tr>
502
+
503
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/863/7971','_blank');">
504
+
505
+ <td>Pliny The Elder</td>
506
+
507
+ <td>$8</td>
508
+ <td>Russian River</td>
509
+ <td>CA</td>
510
+ <td>8</td>
511
+ <td>16oz</td>
512
+ </tr>
513
+
514
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/30356/148836/','_blank');">
515
+
516
+ <td>Prairie-Vous Francais - Saison&nbsp;&nbsp;<div class="btn btn-danger btn-mini"><i class="icon-star icon-white"></i> Just Tapped<i class="icon-star icon-white"></i></div></td>
517
+
518
+ <td>$5</td>
519
+ <td>Prairie</td>
520
+ <td>OK</td>
521
+ <td>3.9</td>
522
+ <td>12oz</td>
523
+ </tr>
524
+
525
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/463/15217/','_blank');">
526
+
527
+ <td>Proving Ground - IPA</td>
528
+
529
+ <td>$5</td>
530
+ <td>Magnolia</td>
531
+ <td>CA</td>
532
+ <td>7.2</td>
533
+ <td>16oz</td>
534
+ </tr>
535
+
536
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/29415/180807/','_blank');">
537
+
538
+ <td>Prowell Springs - Pilsner</td>
539
+
540
+ <td>$5</td>
541
+ <td>Crux</td>
542
+ <td>BND</td>
543
+ <td>5.5</td>
544
+ <td>16oz</td>
545
+ </tr>
546
+
547
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/637/1717','_blank');">
548
+
549
+ <td>Saison</td>
550
+
551
+ <td>$6</td>
552
+ <td>Dupont</td>
553
+ <td>BEL</td>
554
+ <td>6.5</td>
555
+ <td>12oz</td>
556
+ </tr>
557
+
558
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/463/22214/','_blank');">
559
+
560
+ <td>Saison de Lily</td>
561
+
562
+ <td>$5</td>
563
+ <td>Magnolia</td>
564
+ <td>CA</td>
565
+ <td>7.3</td>
566
+ <td>16oz</td>
567
+ </tr>
568
+
569
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/26850/174328/?ba=StonedTrippin','_blank');">
570
+
571
+ <td>Sho&#39; Nuff - Belgian Pale</td>
572
+
573
+ <td>$5</td>
574
+ <td>Against the Grain</td>
575
+ <td>KY</td>
576
+ <td>4.9</td>
577
+ <td>16oz</td>
578
+ </tr>
579
+
580
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/24299/175395/','_blank');">
581
+
582
+ <td>Simple Life - Lacto Saison*</td>
583
+
584
+ <td>$5</td>
585
+ <td>To Øl</td>
586
+ <td>DEN</td>
587
+ <td>10</td>
588
+ <td>6oz</td>
589
+ </tr>
590
+
591
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/463/17591/','_blank');">
592
+
593
+ <td>Stout of Circumstance</td>
594
+
595
+ <td>$5</td>
596
+ <td>Magnolia</td>
597
+ <td>CA</td>
598
+ <td>6.1</td>
599
+ <td>16oz</td>
600
+ </tr>
601
+
602
+ <tr onclick="window.open('http://www.beeradvocate.com/beer/profile/25888/113523/','_blank');">
603
+
604
+ <td>Sump - Imp Coffee Stout</td>
605
+
606
+ <td>$5</td>
607
+ <td>Perennial </td>
608
+ <td>MO</td>
609
+ <td>10.5</td>
610
+ <td>6oz</td>
611
+ </tr>
612
+
613
+ <tr onclick="window.open('http://www.atgbrewery.com/Menu/Beer/2/Dark/3/Tex-Arcana/431','_blank');">
614
+
615
+ <td>Tex Arcana - Stout</td>
616
+
617
+ <td>$5</td>
618
+ <td>Against the Grain</td>
619
+ <td>KY</td>
620
+ <td>6.5</td>
621
+ <td>12oz</td>
622
+ </tr>
623
+
624
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/202/656','_blank');">
625
+
626
+ <td>Tripel Karmeliet</td>
627
+
628
+ <td>$7</td>
629
+ <td>Bosteels</td>
630
+ <td>BEL</td>
631
+ <td>8</td>
632
+ <td>0.33L</td>
633
+ </tr>
634
+
635
+ <tr onclick="window.open('https://untappd.com/b/gigantic-brewing-company-vivid/1529256/photos','_blank');">
636
+
637
+ <td>Vivid - IIPA</td>
638
+
639
+ <td>$5</td>
640
+ <td>Gigantic</td>
641
+ <td>PDX</td>
642
+ <td>8.5</td>
643
+ <td>12oz</td>
644
+ </tr>
645
+
646
+ <tr onclick="window.open('http://beeradvocate.com/beer/profile/5077/53343','_blank');">
647
+
648
+ <td>WFO - IPA</td>
649
+
650
+ <td>$5</td>
651
+ <td>Barley Brown&#39;s</td>
652
+ <td>OR</td>
653
+ <td>7.5</td>
654
+ <td>16oz</td>
655
+ </tr>
656
+
657
+ </tbody>
658
+ </table>
659
+ </div>
660
+ </div>
661
+ </div>
662
+
663
+
664
+ </div>
665
+ </div><!-- /container -->
666
+
667
+ <footer>
668
+ <div id="footer" class="container">
669
+ <p class="pull-right">&copy; 2012 Apex Bar &middot; All Rights Reserved<br>
670
+ <!-- <a href="/login?continue=/admin">Login</a></p> -->
671
+
672
+ <a href="https://www.google.com/accounts/ServiceLogin?service=ah&amp;passive=true&amp;continue=https://appengine.google.com/_ah/conflogin%3Fcontinue%3Dhttp://apexbar.com/&amp;ltmpl=gm&amp;shdf=Ch4LEgZhaG5hbWUaEkFwZXggQmFyIEJlZXIgTWVudQwSAmFoIhSC3NC0sX82AlsVtDm3KH3BFt63tigBMhTbqeik6xdNgcwuRV_0PC-q-ffmmQ" style="color: #5A5A5A">Log In</a>
673
+
674
+ </p>
675
+ <!-- footer -->
676
+ </div><!-- /footer -->
677
+ </footer>
678
+
679
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
680
+ <!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> -->
681
+ <!-- <script src="/static/js/lib/jquery-1.8.2.min.js" type="text/javascript" ></script> -->
682
+ <script src="/static/js/lib/bootstrap-2.2.2.min.js"></script>
683
+ <script src="/static/js/main.js"></script>
684
+
685
+
686
+
687
+
688
+ </body>
689
+ </html>