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 +7 -0
- data/.gitignore +19 -0
- data/.travis.yml +16 -0
- data/Gemfile +6 -0
- data/README.md +30 -0
- data/Rakefile +6 -0
- data/lib/lita-onewheel-apex-bar.rb +12 -0
- data/lib/lita/handlers/onewheel_apex_bar.rb +174 -0
- data/lita-onewheel-apex-bar.gemspec +31 -0
- data/spec/fixtures/apex.html +689 -0
- data/spec/lita/handlers/onewheel_apex_bar_spec.rb +187 -0
- data/spec/spec_helper.rb +14 -0
- metadata +213 -0
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
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
data/README.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# lita-onewheel-apex-bar
|
2
|
+
|
3
|
+
[](https://travis-ci.org/onewheelskyward/lita-onewheel-apex-bar)
|
4
|
+
[](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,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&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'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 '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&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'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'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'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 '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'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 <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' 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'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">© 2012 Apex Bar · 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&passive=true&continue=https://appengine.google.com/_ah/conflogin%3Fcontinue%3Dhttp://apexbar.com/&ltmpl=gm&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>
|