beer-advocate-cli 0.1.4 → 0.2.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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +18 -0
- data/lib/beer_advocate/cli.rb +166 -101
- data/lib/beer_advocate/scraper.rb +39 -0
- data/lib/beer_advocate/version.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f112ae6df99c1023e70365c34df69ada37af7e49d5f425225ee65700c9657457
|
|
4
|
+
data.tar.gz: deda2a0d0950339c738e1cb2a6c59aea448d59369929dd92ba2f8bb7e48502d9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5bf06e5b6d1f7e80b203cce20c5400cb7b5536e01ebe98511f5614883898ceba26630ed89e867d386f6758c89cf8832b6ad1f10672ba4064e9a89629d7943ee9
|
|
7
|
+
data.tar.gz: 84efb5d6e2a69e6a7705c5b5beba8fa01b9d3e1cbfb45cf6373d0934be2ed37e93649c1df43757b6f734e55a6d4cd86f0e9226679e8fa7e21d995e8a69336c48
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -20,8 +20,26 @@ Or install it yourself as:
|
|
|
20
20
|
|
|
21
21
|
## Usage
|
|
22
22
|
|
|
23
|
+
* ~ Mac Terminal installation not working...any input highly appreciated... ~
|
|
24
|
+
|
|
25
|
+
If using the Mac Terminal app, ensure Xcode is installed:
|
|
26
|
+
|
|
27
|
+
xcode-select --install
|
|
28
|
+
|
|
29
|
+
Then type:
|
|
30
|
+
|
|
31
|
+
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
|
32
|
+
|
|
33
|
+
brew install ruby
|
|
34
|
+
|
|
35
|
+
sudo gem install beer-advocate-cli -n /usr/local/bin
|
|
36
|
+
|
|
37
|
+
* ~ ~
|
|
38
|
+
|
|
23
39
|
To run the CLI, simply type 'beer-advocate'.
|
|
24
40
|
|
|
41
|
+
Video walkthrough: https://www.youtube.com/watch?v=0gne-y8op7k&t=2s
|
|
42
|
+
|
|
25
43
|
## Development
|
|
26
44
|
|
|
27
45
|
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/beer_advocate/cli.rb
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
|
+
require 'pry'
|
|
2
|
+
|
|
1
3
|
require_relative './beer.rb'
|
|
2
4
|
require_relative './scraper.rb'
|
|
3
5
|
require_relative './brewery.rb'
|
|
4
6
|
|
|
5
7
|
class BeerAdvocate::CLI
|
|
8
|
+
attr_accessor :beer_list, :beers, :styles, :reviews, :find_beer, :find_brewery, :find_style
|
|
9
|
+
|
|
10
|
+
def initialize
|
|
11
|
+
@beer_list = BeerAdvocate::Beer.create_from_collection(BeerAdvocate::Scraper.scrape_list_page)
|
|
12
|
+
end
|
|
13
|
+
|
|
6
14
|
def welcome
|
|
7
15
|
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
8
16
|
beer_advocate_cli_text = "Beer Advocate CLI".yellow.bold
|
|
@@ -27,33 +35,39 @@ class BeerAdvocate::CLI
|
|
|
27
35
|
end
|
|
28
36
|
end
|
|
29
37
|
|
|
30
|
-
def
|
|
31
|
-
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
32
|
-
puts "Choose a range: || 1 - Most popular ".yellow.bold
|
|
33
|
-
puts " || 250 - Least popular ".yellow.bold
|
|
34
|
-
puts " "
|
|
35
|
-
puts "1. 1-50 | 2. 51-100 | 3. 101-150 | 4. 151-200 | 5. 201-250"
|
|
36
|
-
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
37
|
-
|
|
38
|
+
def show_beers_table_input
|
|
38
39
|
case take_input
|
|
39
40
|
when "1"
|
|
40
|
-
beers =
|
|
41
|
+
@beers = @beer_list[0..49]
|
|
41
42
|
when "2"
|
|
42
|
-
beers =
|
|
43
|
+
@beers = @beer_list[50..99]
|
|
43
44
|
when "3"
|
|
44
|
-
beers =
|
|
45
|
+
@beers = @beer_list[100..149]
|
|
45
46
|
when "4"
|
|
46
|
-
beers =
|
|
47
|
+
@beers = @beer_list[150..199]
|
|
47
48
|
when "5"
|
|
48
|
-
beers =
|
|
49
|
+
@beers = @beer_list[200..249]
|
|
49
50
|
else
|
|
50
|
-
|
|
51
|
+
puts ""
|
|
52
|
+
puts "Invalid. Please type 1-5:".bold
|
|
53
|
+
show_beers_table_input
|
|
51
54
|
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def show_beers_table
|
|
58
|
+
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
59
|
+
puts "Choose a range: || 1 - Most popular ".yellow.bold
|
|
60
|
+
puts " || 250 - Least popular ".yellow.bold
|
|
61
|
+
puts " "
|
|
62
|
+
puts "1. 1-50 | 2. 51-100 | 3. 101-150 | 4. 151-200 | 5. 201-250"
|
|
63
|
+
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
64
|
+
|
|
65
|
+
show_beers_table_input
|
|
52
66
|
|
|
53
67
|
green_beer = "Name".green.bold
|
|
54
68
|
blue_brewery = "Brewery".light_blue.bold
|
|
55
69
|
abv = abv = " | ABV | "
|
|
56
|
-
bold_rating = "Score
|
|
70
|
+
bold_rating = "Score".red.bold
|
|
57
71
|
the_rest = " | Review count"
|
|
58
72
|
complete_beer = green_beer << " | " << blue_brewery << abv << bold_rating << the_rest
|
|
59
73
|
|
|
@@ -62,7 +76,7 @@ class BeerAdvocate::CLI
|
|
|
62
76
|
puts complete_beer
|
|
63
77
|
puts " "
|
|
64
78
|
puts " "
|
|
65
|
-
beers.each do |beer|
|
|
79
|
+
@beers.each do |beer|
|
|
66
80
|
green_beer1 = "#{beer[:name]}".green.bold
|
|
67
81
|
blue_brewery1 = "#{beer[:brewery]}".light_blue.bold
|
|
68
82
|
abv1 = " | #{beer[:abv]} | "
|
|
@@ -78,29 +92,10 @@ class BeerAdvocate::CLI
|
|
|
78
92
|
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
79
93
|
end
|
|
80
94
|
|
|
81
|
-
|
|
82
|
-
def show_beer(beer)
|
|
83
|
-
beers = BeerAdvocate::Beer.find_or_create_from_collection(BeerAdvocate::Scraper.scrape_list_page)
|
|
84
|
-
find_beer = beers.find do |listed_beer|
|
|
85
|
-
listed_beer[:name].downcase == beer.downcase
|
|
86
|
-
end
|
|
87
|
-
if find_beer == nil
|
|
88
|
-
exit
|
|
89
|
-
end
|
|
90
|
-
beer_page_details = BeerAdvocate::Scraper.scrape_name_page(find_beer[:name_url])
|
|
91
|
-
|
|
92
|
-
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
93
|
-
puts "#{find_beer[:name]}".yellow.bold
|
|
94
|
-
puts " "
|
|
95
|
-
puts "Brewery: #{find_beer[:brewery]} || Style: #{find_beer[:style]} || ABV: #{find_beer[:abv]} || Score: #{find_beer[:score]} || Review count: #{find_beer[:review_count]}"
|
|
96
|
-
puts " "
|
|
97
|
-
puts "1. Top reviews | 2. Brewery details | 3. Style details".light_blue.bold
|
|
98
|
-
puts "Choose an option above.".yellow.bold
|
|
99
|
-
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
95
|
+
def show_beer_input
|
|
100
96
|
case take_input
|
|
101
97
|
when "1"
|
|
102
|
-
reviews
|
|
103
|
-
reviews.each do |review|
|
|
98
|
+
@reviews.each do |review|
|
|
104
99
|
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
105
100
|
puts "#{review}"
|
|
106
101
|
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
@@ -108,62 +103,87 @@ class BeerAdvocate::CLI
|
|
|
108
103
|
end
|
|
109
104
|
puts "Type 'menu':".yellow.bold
|
|
110
105
|
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
111
|
-
|
|
106
|
+
menu_from_reviews
|
|
112
107
|
when "2"
|
|
113
108
|
show_brewery(find_beer[:brewery])
|
|
114
109
|
when "3"
|
|
115
110
|
show_style(find_beer[:style])
|
|
111
|
+
else
|
|
112
|
+
puts ""
|
|
113
|
+
puts "Invalid. Please type 1-3:".bold
|
|
114
|
+
show_beer_input
|
|
116
115
|
end
|
|
117
116
|
end
|
|
118
117
|
|
|
118
|
+
def menu_from_reviews
|
|
119
|
+
if take_input != "menu" || take_input != "exit"
|
|
120
|
+
puts ""
|
|
121
|
+
puts "Type 'menu':".bold
|
|
122
|
+
menu_from_reviews
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def show_beer(beer)
|
|
127
|
+
@find_beer = @beer_list.find do |listed_beer|
|
|
128
|
+
listed_beer[:name].downcase == beer.downcase
|
|
129
|
+
end
|
|
130
|
+
if @find_beer == nil
|
|
131
|
+
puts ""
|
|
132
|
+
puts "Invalid. Please type the beer exactly as it appears in the beer list:".bold
|
|
133
|
+
show_beer(take_input)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
if BeerAdvocate::Scraper.find_url(find_beer[:name_url]) == nil
|
|
137
|
+
beer_page_details = BeerAdvocate::Scraper.scrape_name_page(find_beer[:name_url])
|
|
138
|
+
else
|
|
139
|
+
beer_page_details = BeerAdvocate::Scraper.find_url_details(find_beer[:name_url])
|
|
140
|
+
end
|
|
141
|
+
@reviews = beer_page_details[:top_reviews]
|
|
142
|
+
|
|
143
|
+
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
144
|
+
puts "#{find_beer[:name]}".yellow.bold
|
|
145
|
+
puts " "
|
|
146
|
+
puts "Brewery: #{find_beer[:brewery]} || Style: #{find_beer[:style]} || ABV: #{find_beer[:abv]} || Score: #{find_beer[:score]} || Review count: #{find_beer[:review_count]}"
|
|
147
|
+
puts " "
|
|
148
|
+
puts "1. Top reviews | 2. Brewery details | 3. Style details".light_blue.bold
|
|
149
|
+
puts "Choose an option above.".yellow.bold
|
|
150
|
+
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
151
|
+
|
|
152
|
+
show_beer_input
|
|
153
|
+
end
|
|
154
|
+
|
|
119
155
|
def show_styles_list
|
|
120
|
-
|
|
121
|
-
styles = beers.collect do |beer|
|
|
156
|
+
@styles = @beer_list.collect do |beer|
|
|
122
157
|
beer[:style]
|
|
123
158
|
end
|
|
124
|
-
styles.uniq!
|
|
125
|
-
styles.sort!
|
|
159
|
+
@styles.uniq!
|
|
160
|
+
@styles.sort!
|
|
126
161
|
|
|
127
162
|
puts "- - - - - - - - - - - - - - - - -".light_blue
|
|
128
163
|
puts "Type a style number:".yellow.bold
|
|
129
164
|
puts " "
|
|
130
|
-
styles.each do |style|
|
|
165
|
+
@styles.each do |style|
|
|
131
166
|
puts "#{styles.index(style) + 1}. #{style}"
|
|
132
167
|
end
|
|
133
168
|
puts " "
|
|
134
169
|
puts "Type a style number:".yellow.bold
|
|
135
170
|
puts "- - - - - - - - - - - - - - - - -".light_blue
|
|
136
171
|
|
|
172
|
+
show_styles_list_input
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def show_styles_list_input
|
|
137
176
|
numerized_input = take_input.to_i
|
|
138
|
-
if numerized_input
|
|
139
|
-
|
|
140
|
-
else
|
|
141
|
-
|
|
177
|
+
if numerized_input.between?(1, @styles.length)
|
|
178
|
+
show_style(@styles[numerized_input - 1])
|
|
179
|
+
else
|
|
180
|
+
puts ""
|
|
181
|
+
puts "Invalid. Please type a style number:".bold
|
|
182
|
+
show_styles_list_input
|
|
142
183
|
end
|
|
143
184
|
end
|
|
144
185
|
|
|
145
|
-
def
|
|
146
|
-
beers = BeerAdvocate::Beer.find_or_create_from_collection(BeerAdvocate::Scraper.scrape_list_page)
|
|
147
|
-
find_style = beers.find do |listed_beer|
|
|
148
|
-
listed_beer[:style].downcase == style.downcase
|
|
149
|
-
end
|
|
150
|
-
if find_style == nil
|
|
151
|
-
exit
|
|
152
|
-
end
|
|
153
|
-
style_page_details = BeerAdvocate::Scraper.scrape_style_page(find_style[:style_url])
|
|
154
|
-
|
|
155
|
-
puts "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -".light_blue
|
|
156
|
-
puts "#{find_style[:style]}".yellow.bold
|
|
157
|
-
puts " "
|
|
158
|
-
puts "#{style_page_details[:description]}"
|
|
159
|
-
puts " "
|
|
160
|
-
puts "#{style_page_details[:abv]}".bold
|
|
161
|
-
puts "#{style_page_details[:ibu]}".bold
|
|
162
|
-
puts "#{style_page_details[:glassware]}".bold
|
|
163
|
-
puts " "
|
|
164
|
-
puts "Press '1' for a list of beers of this style.".yellow.bold
|
|
165
|
-
puts "- - - - - - - - - - - - - - - - - - - - - -".light_blue
|
|
166
|
-
|
|
186
|
+
def show_style_input
|
|
167
187
|
case take_input
|
|
168
188
|
when "1"
|
|
169
189
|
beers = BeerAdvocate::Style.find_style(find_style[:style]).beers
|
|
@@ -182,7 +202,7 @@ class BeerAdvocate::CLI
|
|
|
182
202
|
puts complete_beer
|
|
183
203
|
puts " "
|
|
184
204
|
|
|
185
|
-
beers.collect
|
|
205
|
+
new_beers = beers.collect do |beer|
|
|
186
206
|
green_beer1 = "#{beer.name}".green.bold
|
|
187
207
|
interlude1 = " | "
|
|
188
208
|
bold_brewery1 = "#{beer.brewery.name}".red.bold
|
|
@@ -191,9 +211,8 @@ class BeerAdvocate::CLI
|
|
|
191
211
|
complete_beer1 = green_beer1 << interlude1 << bold_brewery1 << interlude1 << abv1 << interlude1 << score1
|
|
192
212
|
complete_beer1
|
|
193
213
|
end
|
|
194
|
-
beers.uniq!.sort!
|
|
195
214
|
|
|
196
|
-
puts
|
|
215
|
+
puts new_beers.uniq.sort
|
|
197
216
|
puts " "
|
|
198
217
|
puts complete_beer
|
|
199
218
|
puts "Type a beer name for more info.".yellow.bold
|
|
@@ -201,37 +220,43 @@ class BeerAdvocate::CLI
|
|
|
201
220
|
puts "#{find_style[:style]}".bold
|
|
202
221
|
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
203
222
|
show_beer(take_input)
|
|
223
|
+
else
|
|
224
|
+
puts ""
|
|
225
|
+
puts "Type '1':".bold
|
|
226
|
+
show_style_input
|
|
204
227
|
end
|
|
205
228
|
end
|
|
206
229
|
|
|
207
|
-
def
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
listed_beer[:brewery].downcase == brewery.downcase
|
|
230
|
+
def show_style(style)
|
|
231
|
+
@find_style = beer_list.find do |listed_beer|
|
|
232
|
+
listed_beer[:style].downcase == style.downcase
|
|
211
233
|
end
|
|
212
|
-
|
|
213
|
-
|
|
234
|
+
|
|
235
|
+
if BeerAdvocate::Scraper.find_url(find_style[:style_url]) == nil
|
|
236
|
+
style_page_details = BeerAdvocate::Scraper.scrape_style_page(find_style[:style_url])
|
|
237
|
+
else
|
|
238
|
+
style_page_details = BeerAdvocate::Scraper.find_url_details(find_style[:style_url])
|
|
214
239
|
end
|
|
215
|
-
brewery_page_details = BeerAdvocate::Scraper.scrape_brewery_page(find_brewery[:brewery_url])
|
|
216
240
|
|
|
217
|
-
puts "- - - - - - - - - - - - - - - - - - - - - - - - - -".light_blue
|
|
218
|
-
puts "#{
|
|
219
|
-
puts " "
|
|
220
|
-
puts "#{brewery_page_details[:type]}"
|
|
221
|
-
puts " "
|
|
222
|
-
puts "#{brewery_page_details[:address]}"
|
|
241
|
+
puts "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -".light_blue
|
|
242
|
+
puts "#{find_style[:style]}".yellow.bold
|
|
223
243
|
puts " "
|
|
224
|
-
puts "#{
|
|
244
|
+
puts "#{style_page_details[:description]}"
|
|
225
245
|
puts " "
|
|
226
|
-
puts "#{
|
|
246
|
+
puts "#{style_page_details[:abv]}".bold
|
|
247
|
+
puts "#{style_page_details[:ibu]}".bold
|
|
248
|
+
puts "#{style_page_details[:glassware]}".bold
|
|
227
249
|
puts " "
|
|
228
|
-
puts "Press '1' for a list of beers
|
|
229
|
-
puts "- - - - - - - - - - - - - - - - - - - - - -
|
|
250
|
+
puts "Press '1' for a list of beers of this style.".yellow.bold
|
|
251
|
+
puts "- - - - - - - - - - - - - - - - - - - - - -".light_blue
|
|
230
252
|
|
|
253
|
+
show_style_input
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
def show_brewery_input
|
|
231
257
|
case take_input
|
|
232
258
|
when "1"
|
|
233
|
-
beers = BeerAdvocate::Brewery.find_brewery(find_brewery[:brewery]).beers
|
|
234
|
-
|
|
259
|
+
beers = BeerAdvocate::Brewery.find_brewery(@find_brewery[:brewery]).beers
|
|
235
260
|
green_beer = "Name".green.bold
|
|
236
261
|
interlude = " | "
|
|
237
262
|
bold_style = "Style".red.bold
|
|
@@ -246,7 +271,7 @@ class BeerAdvocate::CLI
|
|
|
246
271
|
puts complete_beer
|
|
247
272
|
puts " "
|
|
248
273
|
|
|
249
|
-
beers.collect
|
|
274
|
+
colored_beers = beers.collect do |beer|
|
|
250
275
|
green_beer1 = "#{beer.name}".green.bold
|
|
251
276
|
interlude1 = " | "
|
|
252
277
|
bold_style1 = "#{beer.style.name}".red.bold
|
|
@@ -255,9 +280,8 @@ class BeerAdvocate::CLI
|
|
|
255
280
|
complete_beer1 = green_beer1 << interlude1 << bold_style1 << interlude1 << abv1 << interlude1 << score1
|
|
256
281
|
complete_beer1
|
|
257
282
|
end
|
|
258
|
-
beers.uniq!.sort!
|
|
259
283
|
|
|
260
|
-
puts
|
|
284
|
+
puts colored_beers.uniq.sort
|
|
261
285
|
puts " "
|
|
262
286
|
puts complete_beer
|
|
263
287
|
puts "Type a beer name for more info.".yellow.bold
|
|
@@ -265,17 +289,60 @@ class BeerAdvocate::CLI
|
|
|
265
289
|
puts "#{find_brewery[:brewery]}".bold
|
|
266
290
|
puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
|
|
267
291
|
show_beer(take_input)
|
|
292
|
+
else
|
|
293
|
+
puts ""
|
|
294
|
+
puts "Type '1':".bold
|
|
295
|
+
show_brewery_input
|
|
268
296
|
end
|
|
269
297
|
end
|
|
270
298
|
|
|
299
|
+
def show_brewery(brewery)
|
|
300
|
+
@find_brewery = @beer_list.find do |listed_beer|
|
|
301
|
+
listed_beer[:brewery].downcase == brewery.downcase
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
if find_brewery == nil
|
|
305
|
+
puts ""
|
|
306
|
+
puts "Invalid. Please type the brewery exactly as it appears in the beer list:".bold
|
|
307
|
+
show_brewery(take_input)
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
if BeerAdvocate::Scraper.find_url(find_brewery[:brewery_url]) == nil
|
|
311
|
+
brewery_page_details = BeerAdvocate::Scraper.scrape_brewery_page(find_brewery[:brewery_url])
|
|
312
|
+
else
|
|
313
|
+
brewery_page_details = BeerAdvocate::Scraper.find_url_details(find_brewery[:brewery_url])
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
#binding.pry
|
|
317
|
+
|
|
318
|
+
puts "- - - - - - - - - - - - - - - - - - - - - - - - - -".light_blue
|
|
319
|
+
puts "#{find_brewery[:brewery]}".yellow.bold
|
|
320
|
+
puts " "
|
|
321
|
+
puts "#{brewery_page_details[:type]}"
|
|
322
|
+
puts " "
|
|
323
|
+
puts "#{brewery_page_details[:address]}"
|
|
324
|
+
puts " "
|
|
325
|
+
puts "#{brewery_page_details[:phone_number]}"
|
|
326
|
+
puts " "
|
|
327
|
+
puts "#{brewery_page_details[:website]}"
|
|
328
|
+
puts " "
|
|
329
|
+
puts "Press '1' for a list of beers from this brewery.".yellow.bold
|
|
330
|
+
puts "- - - - - - - - - - - - - - - - - - - - - - - - - -".light_blue
|
|
331
|
+
|
|
332
|
+
show_brewery_input
|
|
333
|
+
end
|
|
334
|
+
|
|
271
335
|
def beer_table_interaction
|
|
272
336
|
show_beers_table
|
|
273
337
|
show_beer(take_input)
|
|
274
338
|
end
|
|
275
339
|
|
|
276
340
|
def run
|
|
277
|
-
BeerAdvocate::Beer.create_from_collection(BeerAdvocate::Scraper.scrape_list_page)
|
|
278
341
|
welcome
|
|
342
|
+
welcome_input
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
def welcome_input
|
|
279
346
|
case take_input
|
|
280
347
|
when "1"
|
|
281
348
|
beer_table_interaction
|
|
@@ -289,12 +356,10 @@ class BeerAdvocate::CLI
|
|
|
289
356
|
puts ""
|
|
290
357
|
puts "Type brewery name:".bold
|
|
291
358
|
show_brewery(take_input)
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
def message
|
|
297
|
-
"Sorry, input invalid."
|
|
359
|
+
else
|
|
360
|
+
puts ""
|
|
361
|
+
puts "Invalid. Please type 1-4:".bold
|
|
362
|
+
welcome_input
|
|
298
363
|
end
|
|
299
364
|
end
|
|
300
365
|
end
|
|
@@ -1,7 +1,28 @@
|
|
|
1
1
|
class BeerAdvocate::Scraper
|
|
2
2
|
BEER_ADVOCATE_URL = "https://www.beeradvocate.com/lists/popular/"
|
|
3
3
|
|
|
4
|
+
@@scraped_urls = []
|
|
5
|
+
|
|
6
|
+
def self.scraped_urls
|
|
7
|
+
@@scraped_urls
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.find_url(url)
|
|
11
|
+
self.scraped_urls.find do |scraped_url_hash|
|
|
12
|
+
scraped_url_hash.keys.to_s.split('"')[1] == url
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.find_url_details(url)
|
|
17
|
+
found_url = self.scraped_urls.find do |scraped_url_hash|
|
|
18
|
+
scraped_url_hash.keys.to_s.split('"')[1] == url
|
|
19
|
+
end
|
|
20
|
+
found_url[url.to_sym]
|
|
21
|
+
end
|
|
22
|
+
|
|
4
23
|
def self.scrape_list_page
|
|
24
|
+
puts "SCRAPING #{BEER_ADVOCATE_URL} ************"
|
|
25
|
+
|
|
5
26
|
html = open(BEER_ADVOCATE_URL)
|
|
6
27
|
beer_list_page = Nokogiri::HTML(html)
|
|
7
28
|
|
|
@@ -27,6 +48,8 @@ class BeerAdvocate::Scraper
|
|
|
27
48
|
end
|
|
28
49
|
|
|
29
50
|
def self.scrape_name_page(name_url)
|
|
51
|
+
puts "SCRAPING #{name_url} ************"
|
|
52
|
+
|
|
30
53
|
html = open(name_url)
|
|
31
54
|
name_page = Nokogiri::HTML(html)
|
|
32
55
|
|
|
@@ -47,10 +70,16 @@ class BeerAdvocate::Scraper
|
|
|
47
70
|
name_hash[:top_reviews] = name_hash[:top_reviews][1..9]
|
|
48
71
|
name_hash[:top_reviews].delete_if {|review| review.length < 40}
|
|
49
72
|
|
|
73
|
+
scraped_url_hash = {}
|
|
74
|
+
scraped_url_hash[name_url.to_sym] = name_hash
|
|
75
|
+
self.scraped_urls << scraped_url_hash
|
|
76
|
+
|
|
50
77
|
name_hash
|
|
51
78
|
end
|
|
52
79
|
|
|
53
80
|
def self.scrape_brewery_page(brewery_url)
|
|
81
|
+
puts "SCRAPING #{brewery_url} ************"
|
|
82
|
+
|
|
54
83
|
html = open(brewery_url)
|
|
55
84
|
brewery_page = Nokogiri::HTML(html)
|
|
56
85
|
|
|
@@ -65,10 +94,16 @@ class BeerAdvocate::Scraper
|
|
|
65
94
|
brewery_hash[:phone_number] = jumbled_phone_number.split("|")[0].strip
|
|
66
95
|
brewery_hash[:website] = jumbled_phone_number.split("\n")[1].strip
|
|
67
96
|
|
|
97
|
+
scraped_url_hash = {}
|
|
98
|
+
scraped_url_hash[brewery_url.to_sym] = brewery_hash
|
|
99
|
+
self.scraped_urls << scraped_url_hash
|
|
100
|
+
|
|
68
101
|
brewery_hash
|
|
69
102
|
end
|
|
70
103
|
|
|
71
104
|
def self.scrape_style_page(style_url)
|
|
105
|
+
puts "SCRAPING #{style_url} ************"
|
|
106
|
+
|
|
72
107
|
html = open(style_url)
|
|
73
108
|
style_page = Nokogiri::HTML(html)
|
|
74
109
|
|
|
@@ -81,6 +116,10 @@ class BeerAdvocate::Scraper
|
|
|
81
116
|
style_hash[:ibu] = jumbled_details[1].strip
|
|
82
117
|
style_hash[:glassware] = jumbled_details[2].strip
|
|
83
118
|
|
|
119
|
+
scraped_url_hash = {}
|
|
120
|
+
scraped_url_hash[style_url.to_sym] = style_hash
|
|
121
|
+
self.scraped_urls << scraped_url_hash
|
|
122
|
+
|
|
84
123
|
style_hash
|
|
85
124
|
end
|
|
86
125
|
end
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module BeerAdvocate
|
|
2
|
-
VERSION = "0.
|
|
3
|
-
end
|
|
2
|
+
VERSION = "0.2.0"
|
|
3
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: beer-advocate-cli
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nate Tan
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-
|
|
11
|
+
date: 2019-05-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|