beer_list 1.0.0 → 1.1.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.
- data/Gemfile.lock +3 -3
- data/README.md +59 -11
- data/beer_list.gemspec +1 -1
- data/lib/beer_list.rb +44 -4
- data/lib/beer_list/cli.rb +33 -4
- data/lib/beer_list/establishments/blue_door_pub.rb +15 -0
- data/lib/beer_list/establishments/ginger_hop.rb +15 -0
- data/lib/beer_list/establishments/mc_coys_mn.rb +36 -0
- data/lib/beer_list/exceptions.rb +14 -0
- data/lib/beer_list/scraper.rb +12 -2
- data/lib/beer_list/settings.rb +5 -0
- data/spec/lib/beer_list/scraper_spec.rb +62 -0
- data/spec/lib/beer_list_spec.rb +47 -0
- metadata +8 -2
data/Gemfile.lock
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
beer_list (
|
4
|
+
beer_list (1.1.0)
|
5
5
|
mechanize (~> 2.6.0)
|
6
6
|
thor (~> 0.18.1)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
specs:
|
10
10
|
diff-lcs (1.1.3)
|
11
|
-
domain_name (0.5.
|
11
|
+
domain_name (0.5.11)
|
12
12
|
unf (>= 0.0.5, < 1.0.0)
|
13
13
|
mechanize (2.6.0)
|
14
14
|
domain_name (~> 0.5, >= 0.5.1)
|
@@ -18,7 +18,7 @@ GEM
|
|
18
18
|
nokogiri (~> 1.4)
|
19
19
|
ntlm-http (~> 0.1, >= 0.1.1)
|
20
20
|
webrobots (>= 0.0.9, < 0.2)
|
21
|
-
mime-types (1.
|
21
|
+
mime-types (1.23)
|
22
22
|
net-http-digest_auth (1.3)
|
23
23
|
net-http-persistent (2.8)
|
24
24
|
nokogiri (1.5.9)
|
data/README.md
CHANGED
@@ -4,6 +4,8 @@ A utility for retrieving the beer list from various establishments
|
|
4
4
|
|
5
5
|
## Usage
|
6
6
|
|
7
|
+
### Installation
|
8
|
+
|
7
9
|
`gem install beer_list`
|
8
10
|
|
9
11
|
or in your gemfile:
|
@@ -18,7 +20,7 @@ then require the gem:
|
|
18
20
|
|
19
21
|
See what's on tap:
|
20
22
|
|
21
|
-
```
|
23
|
+
```ruby
|
22
24
|
# An array-like object
|
23
25
|
list = BeerList.groveland_tap
|
24
26
|
|
@@ -38,7 +40,7 @@ but its easy to [extend BeerList](#extending-beerlist-with-more-establishments)
|
|
38
40
|
|
39
41
|
First, let's try one out of the box:
|
40
42
|
|
41
|
-
```
|
43
|
+
```ruby
|
42
44
|
bulldog_northeast = BeerList::Establishments::BulldogNortheast.new
|
43
45
|
|
44
46
|
# Now get the list
|
@@ -48,7 +50,7 @@ bulldog_northeast.list
|
|
48
50
|
You may want to get lists for more than one establishment at a time. To do so, register
|
49
51
|
the desired establishments in BeerList.establishments:
|
50
52
|
|
51
|
-
```
|
53
|
+
```ruby
|
52
54
|
three_squares = BeerList::Establishments::ThreeSquares.new
|
53
55
|
muddy_waters = BeerList::Establishments::MuddyWaters.new
|
54
56
|
|
@@ -82,7 +84,7 @@ For example:
|
|
82
84
|
|
83
85
|
will create the following code in path/to/establishments/applebirds.rb
|
84
86
|
|
85
|
-
```
|
87
|
+
```ruby
|
86
88
|
module BeerList
|
87
89
|
module Establishments
|
88
90
|
class Applebirds < Establishment
|
@@ -107,7 +109,7 @@ end
|
|
107
109
|
|
108
110
|
For all options you can pass to beer_list establish, run:
|
109
111
|
|
110
|
-
`$ beer_list help`
|
112
|
+
`$ beer_list help establish`
|
111
113
|
|
112
114
|
### Using Your Generated Establishments
|
113
115
|
|
@@ -116,10 +118,15 @@ use the fruit of your labor in a real application. You'll need to tell BeerList
|
|
116
118
|
about the generated files so that it can require them. If you're using Rails, add
|
117
119
|
the following code in an initializer:
|
118
120
|
|
119
|
-
|
121
|
+
```ruby
|
122
|
+
BeerList.configure do |c|
|
123
|
+
c.establishments_dir = File.join(Rails.root, 'path/to/establishments')
|
124
|
+
end
|
125
|
+
```
|
120
126
|
|
127
|
+
Then in your app:
|
121
128
|
|
122
|
-
```
|
129
|
+
```ruby
|
123
130
|
# Fetch just the list at Applebirds
|
124
131
|
BeerList.applebirds
|
125
132
|
|
@@ -137,12 +144,45 @@ AND...
|
|
137
144
|
|
138
145
|
Checkout [This link](http://mechanize.rubyforge.org/) for more on Mechanize
|
139
146
|
|
147
|
+
### Sending Lists
|
148
|
+
|
149
|
+
Once you have lists, you can use them locally (obviously), or you can send them elsewhere.
|
150
|
+
Configure BeerList with a default URL like this:
|
151
|
+
|
152
|
+
```ruby
|
153
|
+
BeerList.configure do |c|
|
154
|
+
c.default_url = 'https://yourapp.com/some_sweet_beer_route'
|
155
|
+
end
|
156
|
+
```
|
157
|
+
|
158
|
+
Then in your code, send a list!
|
159
|
+
|
160
|
+
```ruby
|
161
|
+
applebirds = BeerList.applebirds
|
162
|
+
|
163
|
+
# POSTs your list to your default_url as JSON under the "beer_list" name
|
164
|
+
BeerList.send_list(applebirds)
|
165
|
+
|
166
|
+
# You can also give it an explicit URL
|
167
|
+
other_route = 'http://myotherapp.com/another_beer_route'
|
168
|
+
BeerList.send_list(applebirds, other_route)
|
169
|
+
|
170
|
+
# Register some lists and send 'em all at once:
|
171
|
+
thursdays = BeerList::Establishments::Thursdays.new
|
172
|
+
|
173
|
+
BeerList.add_establishments(applebirds, thursdays)
|
174
|
+
BeerList.send_lists
|
175
|
+
```
|
176
|
+
|
177
|
+
Both .send_list and .send_lists accept an optional URL as the last argument. If you don't pass one,
|
178
|
+
it will use the default in your configuration. If neither doesn't exist, it will raise an error.
|
179
|
+
|
140
180
|
### Leads
|
141
181
|
|
142
182
|
If you're out of ideas on what establishments you may want lists for, fear not: BeerList can
|
143
183
|
give you some ideas.
|
144
184
|
|
145
|
-
```
|
185
|
+
```ruby
|
146
186
|
# You might be interested in good beer bars located in California:
|
147
187
|
cali = BeerList::Leads::CA.new
|
148
188
|
|
@@ -163,12 +203,14 @@ it in the not-too-distant future.
|
|
163
203
|
### CLI
|
164
204
|
|
165
205
|
In addition to the [establish](#extending-beerlist-with-more-establishments) command, which
|
166
|
-
generates Establishment files for you, BeerList also offers
|
206
|
+
generates Establishment files for you, BeerList also offers a few other commands:
|
207
|
+
|
208
|
+
There's the `list` command. For example,
|
167
209
|
say you have the following two establishments a directory called ~/my_beer_lists:
|
168
210
|
|
169
211
|
```
|
170
|
-
|
171
|
-
|
212
|
+
applebirds.rb
|
213
|
+
thursdays.rb
|
172
214
|
```
|
173
215
|
|
174
216
|
You can get the beer lists for these places from the command line:
|
@@ -182,3 +224,9 @@ $ beer_list list applebirds thursdays -d ~/my_beer_lists
|
|
182
224
|
# pass -j for JSON
|
183
225
|
$ beer_list list applebirds thursdays -j -d ~/my_beer_lists
|
184
226
|
```
|
227
|
+
|
228
|
+
There's also the `send` command for [sending your lists](#sending-lists) to a given URL:
|
229
|
+
|
230
|
+
`$ beer_list send applebirds thursdays -u 'http://mybeerapiendpoint.com/beer_list'`
|
231
|
+
|
232
|
+
See `$ beer_list help` for all commands
|
data/beer_list.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = 'beer_list'
|
3
|
-
spec.version = '1.
|
3
|
+
spec.version = '1.1.0'
|
4
4
|
spec.authors = ['Dan Olson']
|
5
5
|
spec.email = ['olson_dan@yahoo.com']
|
6
6
|
spec.description = 'A utility for retrieving the beer list from various establishments'
|
data/lib/beer_list.rb
CHANGED
@@ -2,6 +2,7 @@ require 'mechanize'
|
|
2
2
|
require 'json'
|
3
3
|
|
4
4
|
module BeerList
|
5
|
+
require 'beer_list/settings'
|
5
6
|
require 'beer_list/scraper'
|
6
7
|
require 'beer_list/list'
|
7
8
|
require 'beer_list/exceptions'
|
@@ -14,12 +15,30 @@ module BeerList
|
|
14
15
|
|
15
16
|
class << self
|
16
17
|
|
18
|
+
def configure
|
19
|
+
yield settings
|
20
|
+
true
|
21
|
+
end
|
22
|
+
|
23
|
+
def settings
|
24
|
+
@settings ||= Settings.new
|
25
|
+
end
|
26
|
+
|
27
|
+
def default_url
|
28
|
+
settings.default_url
|
29
|
+
end
|
30
|
+
|
17
31
|
def establishments_dir
|
18
|
-
|
32
|
+
settings.establishments_dir
|
19
33
|
end
|
20
34
|
|
35
|
+
### DEPRECATED ###
|
21
36
|
def establishments_dir=(directory)
|
22
|
-
|
37
|
+
puts <<-dep
|
38
|
+
BeerList.establishments_dir= is deprecated and will be removed.
|
39
|
+
Please use BeerList.configure instead
|
40
|
+
dep
|
41
|
+
settings.establishments_dir = directory
|
23
42
|
end
|
24
43
|
|
25
44
|
def establishments
|
@@ -57,6 +76,19 @@ module BeerList
|
|
57
76
|
lists_as_hash.to_json
|
58
77
|
end
|
59
78
|
|
79
|
+
def send_list(list, url=nil)
|
80
|
+
url ||= default_url
|
81
|
+
raise NoUrlError unless url
|
82
|
+
raise NotAListError unless list.is_a? BeerList::List
|
83
|
+
scraper.send_json url, list.to_json
|
84
|
+
end
|
85
|
+
|
86
|
+
def send_lists(url=nil)
|
87
|
+
url ||= default_url
|
88
|
+
raise NoUrlError unless url
|
89
|
+
scraper.send_json url, lists_as_json
|
90
|
+
end
|
91
|
+
|
60
92
|
def scraper
|
61
93
|
@scraper ||= Scraper.instance
|
62
94
|
end
|
@@ -78,11 +110,19 @@ module BeerList
|
|
78
110
|
|
79
111
|
def method_missing(method, *args, &block)
|
80
112
|
class_name = method.to_s.split('_').map(&:capitalize).join
|
81
|
-
klass = get_class_with_namespace
|
82
|
-
|
113
|
+
if klass = get_class_with_namespace(class_name)
|
114
|
+
scraper.beer_list klass.new
|
115
|
+
else
|
116
|
+
super
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def is_establishment?(class_name)
|
121
|
+
BeerList::Establishments.constants.include? class_name.to_sym
|
83
122
|
end
|
84
123
|
|
85
124
|
def get_class_with_namespace(class_name)
|
125
|
+
return nil unless is_establishment? class_name
|
86
126
|
['BeerList', 'Establishments', class_name].inject(Object){ |o, name| o.const_get(name) }
|
87
127
|
end
|
88
128
|
end
|
data/lib/beer_list/cli.rb
CHANGED
@@ -11,7 +11,7 @@ module BeerList
|
|
11
11
|
banner: 'The directory in which BeerList will put your establishments'
|
12
12
|
option :selector,
|
13
13
|
aliases: '-s',
|
14
|
-
banner:
|
14
|
+
banner: 'Optional selector to use for scraping'
|
15
15
|
|
16
16
|
desc 'establish ESTABLISHMENT', 'Generate a subclass of BeerList::Establishments::Establishment in the given directory'
|
17
17
|
def establish(klass)
|
@@ -30,8 +30,8 @@ module BeerList
|
|
30
30
|
|
31
31
|
desc 'list ESTABLISHMENTS', 'Retrieve the beer list at the given establishments'
|
32
32
|
def list(*establishments)
|
33
|
-
|
34
|
-
|
33
|
+
configure
|
34
|
+
add_establishments establishments
|
35
35
|
if options[:json]
|
36
36
|
puts BeerList.lists_as_json
|
37
37
|
else
|
@@ -46,13 +46,42 @@ module BeerList
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
option :url,
|
50
|
+
aliases: '-u',
|
51
|
+
required: true,
|
52
|
+
banner: 'the URL to which to post your lists'
|
53
|
+
desc 'send ESTABLISHMENTS', 'Send (POST) the lists (as JSON) for the given establishments to the given URL'
|
54
|
+
def send(*establishments)
|
55
|
+
configure
|
56
|
+
add_establishments establishments
|
57
|
+
puts "Sent!" if BeerList.send_lists
|
58
|
+
end
|
59
|
+
|
49
60
|
private
|
50
61
|
|
62
|
+
def add_establishments(establishments)
|
63
|
+
BeerList.add_establishments *classify(establishments)
|
64
|
+
end
|
65
|
+
|
66
|
+
def configure
|
67
|
+
BeerList.configure do |c|
|
68
|
+
c.establishments_dir = options[:directory]
|
69
|
+
c.default_url = options[:url]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
51
73
|
def classify(establishments)
|
52
74
|
establishments.map do |est|
|
53
75
|
class_name = est.to_s.split('_').map(&:capitalize).join
|
54
|
-
|
76
|
+
instantiate_or_die class_name
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def instantiate_or_die(class_name)
|
81
|
+
if klass = BeerList.send(:get_class_with_namespace, class_name)
|
55
82
|
klass.new
|
83
|
+
else
|
84
|
+
abort "#{class_name} is not recognized. Is it in your BeerList.establishments_dir?"
|
56
85
|
end
|
57
86
|
end
|
58
87
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module BeerList
|
2
|
+
module Establishments
|
3
|
+
class McCoysMN < Establishment
|
4
|
+
attr_accessor :url
|
5
|
+
|
6
|
+
DRAFTS = 'http://mccoysmn.com/beer/'
|
7
|
+
BOTTLES = 'http://mccoysmn.com/beer/bottles'
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@url = DRAFTS
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_list
|
14
|
+
@beers = []
|
15
|
+
get_draft_list
|
16
|
+
get_bottle_list
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def get_draft_list
|
22
|
+
@beers += base_list
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_bottle_list
|
26
|
+
self.url = BOTTLES
|
27
|
+
self.page = BeerList.scraper.visit self
|
28
|
+
@beers += base_list
|
29
|
+
end
|
30
|
+
|
31
|
+
def base_list
|
32
|
+
page.search('td.title a').map(&:text)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/beer_list/exceptions.rb
CHANGED
@@ -6,4 +6,18 @@ module BeerList
|
|
6
6
|
super msg
|
7
7
|
end
|
8
8
|
end
|
9
|
+
|
10
|
+
class NoUrlError < StandardError
|
11
|
+
def initialize(msg=nil)
|
12
|
+
msg ||= "No url was specified and no default_url exists"
|
13
|
+
super msg
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class NotAListError < StandardError
|
18
|
+
def initialize(msg=nil)
|
19
|
+
msg ||= "That object was not a BeerList::List"
|
20
|
+
super msg
|
21
|
+
end
|
22
|
+
end
|
9
23
|
end
|
data/lib/beer_list/scraper.rb
CHANGED
@@ -17,13 +17,23 @@ module BeerList
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def visit(visitable)
|
20
|
-
visitable.page =
|
20
|
+
visitable.page = agent.get(visitable.url)
|
21
|
+
end
|
22
|
+
|
23
|
+
def send_json(url, json)
|
24
|
+
url = "http://#{url}" unless url.start_with? 'http://'
|
25
|
+
agent.post url, "{\"beer_list\": #{json}}", 'Content-Type' => 'application/json'
|
26
|
+
true
|
21
27
|
end
|
22
28
|
|
23
29
|
private
|
24
30
|
|
25
31
|
def set_user_agent
|
26
|
-
|
32
|
+
agent.user_agent_alias = USER_AGENT
|
33
|
+
end
|
34
|
+
|
35
|
+
def agent
|
36
|
+
@agent
|
27
37
|
end
|
28
38
|
end
|
29
39
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module BeerList
|
4
|
+
describe Scraper do
|
5
|
+
let(:establishment){ BeerList::Establishments::Establishment.new }
|
6
|
+
let(:scraper){ Scraper.instance }
|
7
|
+
let(:agent){ stub }
|
8
|
+
let(:url){ "http://omg.io" }
|
9
|
+
|
10
|
+
before do
|
11
|
+
scraper.stub(:agent){ agent }
|
12
|
+
agent.stub(:user_agent_alias=)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#send_json' do
|
16
|
+
let(:json){ "{\"foo\":\"bar\"}" }
|
17
|
+
let(:headers){ { 'Content-Type' => 'application/json' } }
|
18
|
+
|
19
|
+
it 'posts to the given url with namespaced parameters' do
|
20
|
+
expected_json = "{\"beer_list\": #{json}}"
|
21
|
+
agent.should_receive(:post).with url, expected_json, headers
|
22
|
+
scraper.send_json url, json
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'prepends a scheme if one is not given' do
|
26
|
+
expected_json = "{\"beer_list\": #{json}}"
|
27
|
+
no_scheme_url = 'www.foobar.com'
|
28
|
+
agent.should_receive(:post).with "http://#{no_scheme_url}", expected_json, headers
|
29
|
+
scraper.send_json no_scheme_url, json
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#beer_list' do
|
34
|
+
before do
|
35
|
+
scraper.should_receive(:visit).with establishment
|
36
|
+
end
|
37
|
+
|
38
|
+
it "calls the establishment's #list method" do
|
39
|
+
establishment.should_receive :list
|
40
|
+
scraper.beer_list establishment
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '#visit' do
|
45
|
+
before do
|
46
|
+
establishment.stub(:url){ url }
|
47
|
+
establishment.stub(:list)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "visits the establishment's url" do
|
51
|
+
agent.should_receive(:get).with(url){ 'the page' }
|
52
|
+
scraper.beer_list establishment
|
53
|
+
end
|
54
|
+
|
55
|
+
it "assigns to establishment.page" do
|
56
|
+
agent.stub(:get){ 'the page' }
|
57
|
+
establishment.should_receive(:page=).with 'the page'
|
58
|
+
scraper.beer_list establishment
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/spec/lib/beer_list_spec.rb
CHANGED
@@ -3,6 +3,23 @@ require 'spec_helper'
|
|
3
3
|
describe BeerList do
|
4
4
|
let(:establishment){ BeerList::Establishments::ThreeSquares.new }
|
5
5
|
|
6
|
+
describe '.configure' do
|
7
|
+
before do
|
8
|
+
BeerList.configure do |c|
|
9
|
+
c.establishments_dir = '/home/foo'
|
10
|
+
c.default_url = 'http://omg.io'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'stores the establishments_dir' do
|
15
|
+
BeerList.establishments_dir.should == '/home/foo'
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'stores the default_url' do
|
19
|
+
BeerList.default_url.should == 'http://omg.io'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
6
23
|
describe '.establishments' do
|
7
24
|
|
8
25
|
after(:each) do
|
@@ -109,4 +126,34 @@ describe BeerList do
|
|
109
126
|
end
|
110
127
|
end
|
111
128
|
|
129
|
+
describe 'sending lists' do
|
130
|
+
let(:scraper){ stub }
|
131
|
+
let(:url){ 'http://omg.io' }
|
132
|
+
let(:json){ "{\"foo\":\"bar\"}" }
|
133
|
+
let(:list){ BeerList::List.new }
|
134
|
+
|
135
|
+
before do
|
136
|
+
BeerList.stub(:scraper).and_return scraper
|
137
|
+
list.stub(:to_json).and_return json
|
138
|
+
end
|
139
|
+
|
140
|
+
describe '.send_list' do
|
141
|
+
it 'delegates to the scraper' do
|
142
|
+
scraper.should_receive(:send_json).with(url, json)
|
143
|
+
BeerList.send_list list, url
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe '.send_lists' do
|
148
|
+
before do
|
149
|
+
BeerList.stub(:lists).and_return [list]
|
150
|
+
list.stub(:to_hash).and_return({ foo: 'bar' })
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'delegates to the scraper' do
|
154
|
+
scraper.should_receive(:send_json).with(url, json)
|
155
|
+
BeerList.send_lists url
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
112
159
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beer_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mechanize
|
@@ -95,6 +95,7 @@ files:
|
|
95
95
|
- lib/beer_list/cli.rb
|
96
96
|
- lib/beer_list/establishments.rb
|
97
97
|
- lib/beer_list/establishments/acadia_cafe.rb
|
98
|
+
- lib/beer_list/establishments/blue_door_pub.rb
|
98
99
|
- lib/beer_list/establishments/blue_nile.rb
|
99
100
|
- lib/beer_list/establishments/bulldog_lowertown.rb
|
100
101
|
- lib/beer_list/establishments/bulldog_northeast.rb
|
@@ -102,12 +103,14 @@ files:
|
|
102
103
|
- lib/beer_list/establishments/busters_on28th.rb
|
103
104
|
- lib/beer_list/establishments/edina_grill.rb
|
104
105
|
- lib/beer_list/establishments/establishment.rb
|
106
|
+
- lib/beer_list/establishments/ginger_hop.rb
|
105
107
|
- lib/beer_list/establishments/groveland_tap.rb
|
106
108
|
- lib/beer_list/establishments/happy_gnome.rb
|
107
109
|
- lib/beer_list/establishments/longfellow_grill.rb
|
108
110
|
- lib/beer_list/establishments/lowry_uptown.rb
|
109
111
|
- lib/beer_list/establishments/mackenzie_pub.rb
|
110
112
|
- lib/beer_list/establishments/macs_industrial.rb
|
113
|
+
- lib/beer_list/establishments/mc_coys_mn.rb
|
111
114
|
- lib/beer_list/establishments/muddy_pig.rb
|
112
115
|
- lib/beer_list/establishments/muddy_waters.rb
|
113
116
|
- lib/beer_list/establishments/new_bohemia.rb
|
@@ -119,11 +122,13 @@ files:
|
|
119
122
|
- lib/beer_list/list.rb
|
120
123
|
- lib/beer_list/listable.rb
|
121
124
|
- lib/beer_list/scraper.rb
|
125
|
+
- lib/beer_list/settings.rb
|
122
126
|
- lib/ext/string.rb
|
123
127
|
- lib/generators/establishment_generator.rb
|
124
128
|
- lib/generators/templates/establishment.erb
|
125
129
|
- spec/lib/beer_list/establishments/establishment_spec.rb
|
126
130
|
- spec/lib/beer_list/list_spec.rb
|
131
|
+
- spec/lib/beer_list/scraper_spec.rb
|
127
132
|
- spec/lib/beer_list_spec.rb
|
128
133
|
- spec/spec_helper.rb
|
129
134
|
homepage: https://github.com/DanOlson/beer_list
|
@@ -154,5 +159,6 @@ summary: A beer list scraper
|
|
154
159
|
test_files:
|
155
160
|
- spec/lib/beer_list/establishments/establishment_spec.rb
|
156
161
|
- spec/lib/beer_list/list_spec.rb
|
162
|
+
- spec/lib/beer_list/scraper_spec.rb
|
157
163
|
- spec/lib/beer_list_spec.rb
|
158
164
|
- spec/spec_helper.rb
|