Class: TopBeers::CLI

Inherits:
Object
  • Object
show all
Defined in:
lib/top-beers/cli.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#beer_list_countObject

Returns the value of attribute beer_list_count.



2
3
4
# File 'lib/top-beers/cli.rb', line 2

def beer_list_count
  @beer_list_count
end

#beersObject

Returns the value of attribute beers.



2
3
4
# File 'lib/top-beers/cli.rb', line 2

def beers
  @beers
end

#breweriesObject

Returns the value of attribute breweries.



2
3
4
# File 'lib/top-beers/cli.rb', line 2

def breweries
  @breweries
end

#stylesObject

Returns the value of attribute styles.



2
3
4
# File 'lib/top-beers/cli.rb', line 2

def styles
  @styles
end

Instance Method Details

#beer_menuObject



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/top-beers/cli.rb', line 92

def beer_menu
  input = nil
  while input != "exit"
    puts "\n[Beer Menu]\nSelect a beer by " + "number".colorize(:light_red) + ", see " + "more".colorize(:light_red) + " beers, or type " + "help".colorize(:light_red) + " for a full list of commands." + " Type " + "exit".colorize(:light_red) + " to quit."
    input = gets.strip.downcase

    if input.to_i > 0 && input.to_i <= @beers.length
      beer = @beers[input.to_i - 1]
      if beer.description.nil?
        TopBeers::Scraper.scrape_details(beer)
      end
      display_beer_detail(beer)
    else
      case input
      when "list"
        list_beers
      when "beers"
        list_beers
      when "breweries"
        list_breweries
        brewery_menu
      when "more"
        more_beers
      when "styles"
        list_styles
        style_menu
      when "help"
        help
      when "all"
        list_all_beers
      when "reset"
        reset_beer_counter
        list_beers
      when "exit"
        abort(goodbye)
      else
        puts "\nNot sure what you want. Type " + "help".colorize(:light_red) + " for a full list of commands"
      end
    end
  end
end

#brewery_details_menu(brewery) ⇒ Object



167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# File 'lib/top-beers/cli.rb', line 167

def brewery_details_menu(brewery)
  input = nil
  while input != "exit"
    puts "\n[#{brewery.name} Menu]\nSelect a beer by " + "number".colorize(:light_red) + " or type " + "help".colorize(:light_red) + " for a full list of commands." + " Type " + "exit".colorize(:light_red) + " to quit."
    input = gets.strip.downcase

    if input.to_i > 0 && input.to_i <= brewery.beers.length
      beer = brewery.beers[input.to_i - 1]
      if beer.description.nil?
        TopBeers::Scraper.scrape_details(beer)
      end
      display_beer_detail(beer)
    else
      case input
      when "list"
        brewery.show_beers
      when "beers"
        list_beers
        beer_menu
      when "help"
        help
      when "styles"
        list_styles
        style_menu
      when "breweries"
        list_breweries
        brewery_menu
      when "exit"
        abort(goodbye)
      else
        puts "\nNot sure what you want. Type " + "help".colorize(:light_red) + " for a full list of commands"
      end
    end
  end
end

#brewery_menuObject



134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/top-beers/cli.rb', line 134

def brewery_menu
  input = nil
  while input != "exit"
    puts "\n[Brewery Menu]\nSelect a brewery by " + "number".colorize(:light_red) + " or type " + "help".colorize(:light_red) + " for a full list of commands." + " Type " + "exit".colorize(:light_red) + " to quit."
    input = gets.strip.downcase

    if input.to_i > 0 && input.to_i <= @breweries.length
      brewery = @breweries[input.to_i - 1]
      brewery.show_beers
      brewery_details_menu(brewery)
    else
      case input
      when "list"
        list_breweries
      when "breweries"
        list_breweries
      when "beers"
        list_beers
        beer_menu
      when "styles"
        list_styles
        style_menu
      when "help"
        help
      when "exit"
        abort(goodbye)
      else
        puts "\nNot sure what you want. Type " + "help".colorize(:light_red) + " for a full list of commands"
      end
    end
  end
end

#callObject



4
5
6
7
8
9
10
11
12
# File 'lib/top-beers/cli.rb', line 4

def call
  TopBeers::Scraper.scrape_beers
  @beers = TopBeers::Beer.all
  @breweries = TopBeers::Brewery.all
  @styles = TopBeers::Style.all
  @beer_list_count = 1
  list_beers
  beer_menu
end

#display_beer_detail(beer) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/top-beers/cli.rb', line 77

def display_beer_detail(beer)
  puts "\n"
  puts "-"*"#{@beers.index(beer)+1}".length+"-"*"#{beer.name}".length+"--"
  puts "#{@beers.index(beer)+1}. #{beer.name} \n"
  puts "-"*"#{@beers.index(beer)+1}".length+"-"*"#{beer.name}".length+"--"
  puts "Brewed by".underline + ": #{beer.brewery.name}\n"
  puts "Location".underline + ": #{beer.brewery.location}"
  puts "Website".underline + ": #{beer.brewery.website}"
  puts "Style".underline + ": #{beer.style.name} \n"
  puts "Alcohol by volume (ABV)".underline + ": #{beer.abv} \n"
  puts "Beer Advocate Score".underline + ": #{beer.ba_score} \n"
  puts "Availability".underline + ": #{beer.availability} \n"
  puts "Description".underline + ": #{beer.description}"
end

#goodbyeObject



290
291
292
# File 'lib/top-beers/cli.rb', line 290

def goodbye
  "Thanks for using TopBeers!"
end

#helpObject



272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
# File 'lib/top-beers/cli.rb', line 272

def help
  puts "\n-------------------------"
  puts "TopBeers List of Commands"
  puts "-------------------------"
  puts "Menu selection".underline + ":"
  puts "beers".colorize(:light_red) + " displays the list of top beers, 25 at a time, up to 250"
  puts "breweries".colorize(:light_red) + " displays the list of top breweries"
  puts "styles".colorize(:light_red) + " displays the list of top styles"
  puts "\nFrom the Beers menu".underline + ":"
  puts "more".colorize(:light_red) + " lists 25 more beers from the current point in the list"
  puts "all".colorize(:light_red) + " lists all 250 beers"
  puts "reset".colorize(:light_red) + " shows the top 25 beers"
  puts "\nFrom any menu".underline + ":"
  puts "[number]".colorize(:light_red) + " selects an item with the corresponding number from the current menu"
  puts "list".colorize(:light_red) + " displays the list of the current menu again"
  puts "exit".colorize(:light_red) + " leaves the application"
end

#list_all_beersObject



39
40
41
42
43
# File 'lib/top-beers/cli.rb', line 39

def list_all_beers
  @beers.each.with_index(1) do |beer, i|
    puts "#{i}. #{beer.name} - #{beer.brewery.name} - #{beer.style.name}"
  end
end

#list_beersObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/top-beers/cli.rb', line 17

def list_beers
  puts "\n---------------------------------------"
  puts "Beer Advocate's Best Beers in the World"
  puts "---------------------------------------"

  if @beer_list_count > 25
    i = @beer_list_count - 1
    @beer_list_count = 1
    i.times do
      beer = @beers[beer_list_count - 1]
      puts "#{@beer_list_count}. #{beer.name} - #{beer.brewery.name} - #{beer.style.name}"
      @beer_list_count += 1
    end
  else
    25.times do
      beer = @beers[beer_list_count - 1]
      puts "#{beer_list_count}. #{beer.name} - #{beer.brewery.name} - #{beer.style.name}"
      @beer_list_count += 1
    end
  end
end

#list_breweriesObject



57
58
59
60
61
62
63
64
65
# File 'lib/top-beers/cli.rb', line 57

def list_breweries
  puts "\n------------------------------------"
  puts "Breweries with the World's Top Beers"
  puts "------------------------------------"
  puts
  @breweries.each.with_index(1) do |brewery, i|
    puts "#{i}. #{brewery.name}"
  end
end

#list_stylesObject



67
68
69
70
71
72
73
74
75
# File 'lib/top-beers/cli.rb', line 67

def list_styles
  puts "\n------------------------------------"
  puts "Styles with the World's Top Beers"
  puts "------------------------------------"
  puts
  @styles.each.with_index(1) do |style, i|
    puts "#{i}. #{style.name}"
  end
end

#more_beersObject



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/top-beers/cli.rb', line 45

def more_beers
  if @beer_list_count >= @beers.length
    puts "There are no more beers to list"
  else
    25.times do
      beer = @beers[beer_list_count - 1]
      puts "#{beer_list_count}. #{beer.name} - #{beer.brewery.name} - #{beer.style.name}"
      @beer_list_count += 1
    end
  end
end

#reset_beer_counterObject



14
15
16
# File 'lib/top-beers/cli.rb', line 14

def reset_beer_counter
  @beer_list_count = 1
end

#style_details_menu(style) ⇒ Object

TODO: refactor for TopBeers::Style



236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
# File 'lib/top-beers/cli.rb', line 236

def style_details_menu(style) #TODO: refactor for TopBeers::Style
  input = nil
  while input != "exit"
    puts "\n[#{style.name} Menu]\nSelect a style by " + "number".colorize(:light_red) + " or type " + "help".colorize(:light_red) + " for a full list of commands." + " Type " + "exit".colorize(:light_red) + " to quit."
    input = gets.strip.downcase

    if input.to_i > 0 && input.to_i <= style.beers.length
      beer = style.beers[input.to_i - 1]
      if beer.description.nil?
        TopBeers::Scraper.scrape_details(beer)
      end
      display_beer_detail(beer)
    else
      case input
      when "list"
        style.show_beers
      when "beers"
        list_beers
        beer_menu
      when "breweries"
        list_breweries
        brewery_menu
      when "styles"
        list_styles
        style_menu
      when "help"
        help
      when "exit"
        abort(goodbye)
      else
        puts "\nNot sure what you want. Type " + "help".colorize(:light_red) + " for a full list of commands"
      end
    end
  end
end

#style_menuObject

TODO: refactor for TopBeers::Style



203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
# File 'lib/top-beers/cli.rb', line 203

def style_menu #TODO: refactor for TopBeers::Style
  input = nil
  while input != "exit"
      puts "\n[Style Menu]\nSelect a style by " + "number".colorize(:light_red) + " or type " + "help".colorize(:light_red) + " for a full list of commands." + " Type " + "exit".colorize(:light_red) + " to quit."
    input = gets.strip.downcase

    if input.to_i > 0 && input.to_i <= @styles.length
      style = @styles[input.to_i - 1]
      style.show_beers
      style_details_menu(style)
    else
      case input
      when "list"
        list_styles
      when "styles"
        list_styles
      when "beers"
        list_beers
        beer_menu
      when "breweries"
        list_breweries
        brewery_menu
      when "help"
        help
      when "exit"
        abort(goodbye)
      else
        puts "\nNot sure what you want. Type " + "help".colorize(:light_red) + " for a full list of commands"
      end
    end
  end
end