class BeerAdvocate::CLI

Attributes

beer_list[RW]
beers[RW]
find_beer[RW]
find_brewery[RW]
find_style[RW]
reviews[RW]
styles[RW]

Public Class Methods

new() click to toggle source
# File lib/beer_advocate/cli.rb, line 4
def initialize
  @beer_list = BeerAdvocate::Beer.create_from_collection(BeerAdvocate::Scraper.scrape_list_page)
end

Public Instance Methods

beer_table_interaction() click to toggle source
# File lib/beer_advocate/cli.rb, line 327
def beer_table_interaction
  show_beers_table
  show_beer(take_input)
end
menu_from_reviews() click to toggle source
run() click to toggle source
# File lib/beer_advocate/cli.rb, line 332
def run
  welcome
  welcome_input
end
show_beer(beer) click to toggle source
# File lib/beer_advocate/cli.rb, line 120
def show_beer(beer)
  @find_beer = @beer_list.find do |listed_beer|
    listed_beer[:name].downcase == beer.downcase
  end
  if @find_beer == nil
    puts ""
    puts "Invalid. Please type the beer exactly as it appears in the beer list:".bold
    show_beer(take_input)
  end
  
  if BeerAdvocate::Scraper.find_url(find_beer[:name_url]) == nil
    beer_page_details = BeerAdvocate::Scraper.scrape_name_page(find_beer[:name_url])
  else
    beer_page_details = BeerAdvocate::Scraper.find_url_details(find_beer[:name_url])
  end
  @reviews = beer_page_details[:top_reviews]
  
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
  puts "#{find_beer[:name]}".yellow.bold
  puts " "
  puts "Brewery: #{find_beer[:brewery]} || Style: #{find_beer[:style]} || ABV: #{find_beer[:abv]} || Score: #{find_beer[:score]} || Review count: #{find_beer[:review_count]}"
  puts " "
  puts "1. Top reviews | 2. Brewery details | 3. Style details".light_blue.bold
  puts "Choose an option above.".yellow.bold
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
  
  show_beer_input
end
show_beer_input() click to toggle source
# File lib/beer_advocate/cli.rb, line 89
def show_beer_input
  case take_input
  when "1"
    @reviews.each do |review|
      puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
      puts "#{review}"
      puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
      puts " "
    end
    puts "Type 'menu':".yellow.bold
    puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
    menu_from_reviews
  when "2"
    show_brewery(find_beer[:brewery])
  when "3"
    show_style(find_beer[:style])
  else
    puts ""
    puts "Invalid. Please type 1-3:".bold
    show_beer_input
  end
end
show_beers_table() click to toggle source
# File lib/beer_advocate/cli.rb, line 51
def show_beers_table
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
  puts "Choose a range: || 1   - Most popular  ".yellow.bold
  puts "                || 250 - Least popular ".yellow.bold
  puts " "
  puts "1. 1-50 | 2. 51-100 | 3. 101-150 | 4. 151-200 | 5. 201-250"
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
  
  show_beers_table_input
  
  green_beer = "Name".green.bold
  blue_brewery = "Brewery".light_blue.bold
  abv = abv = " | ABV | "
  bold_rating = "Score".red.bold
  the_rest = " | Review count"
  complete_beer = green_beer << " | " << blue_brewery << abv << bold_rating << the_rest
  
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
  puts "Type a beer name for more info.".yellow.bold
  puts complete_beer
  puts " "
  puts " "
  @beers.each do |beer|
    green_beer1 = "#{beer[:name]}".green.bold
    blue_brewery1 = "#{beer[:brewery]}".light_blue.bold
    abv1 = " | #{beer[:abv]} | "
    bold_rating1 = "#{beer[:score]}".red.bold
    rest1 = " | #{beer[:review_count]}"
    complete_beer1 = green_beer1 << " | " << blue_brewery1 << abv1 << bold_rating1 << rest1
    puts complete_beer1
    puts " "
  end
  puts " "
  puts complete_beer
  puts "Type a beer name for more info.".yellow.bold
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
end
show_beers_table_input() click to toggle source
# File lib/beer_advocate/cli.rb, line 32
def show_beers_table_input
  case take_input
  when "1"
    @beers = @beer_list[0..49]
  when "2"
    @beers = @beer_list[50..99]
  when "3"
    @beers = @beer_list[100..149]
  when "4"
    @beers = @beer_list[150..199]
  when "5"
    @beers = @beer_list[200..249]
  else
    puts ""
    puts "Invalid. Please type 1-5:".bold
    show_beers_table_input
  end
end
show_brewery(brewery) click to toggle source
# File lib/beer_advocate/cli.rb, line 293
def show_brewery(brewery)
  @find_brewery = @beer_list.find do |listed_beer|
    listed_beer[:brewery].downcase == brewery.downcase
  end
  
  if find_brewery == nil
    puts ""
    puts "Invalid. Please type the brewery exactly as it appears in the beer list:".bold
    show_brewery(take_input)
  end
  
  if BeerAdvocate::Scraper.find_url(find_brewery[:brewery_url]) == nil
    brewery_page_details = BeerAdvocate::Scraper.scrape_brewery_page(find_brewery[:brewery_url])
  else
    brewery_page_details = BeerAdvocate::Scraper.find_url_details(find_brewery[:brewery_url])
  end
  
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
  puts "#{find_brewery[:brewery]}".yellow.bold
  puts " "
  puts "#{brewery_page_details[:type]}"
  puts " "
  puts "#{brewery_page_details[:address]}"
  puts " "
  puts "#{brewery_page_details[:phone_number]}"
  puts " "
  puts "#{brewery_page_details[:website]}"
  puts " "
  puts "Press '1' for a list of beers from this brewery.".yellow.bold
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
  
  show_brewery_input
end
show_brewery_input() click to toggle source
# File lib/beer_advocate/cli.rb, line 250
def show_brewery_input
  case take_input
  when "1"
    beers = BeerAdvocate::Brewery.find_brewery(@find_brewery[:brewery]).beers
    green_beer = "Name".green.bold
    interlude = " | "
    bold_style = "Style".red.bold
    abv = "ABV".bold
    score = "Score".yellow.bold
    complete_beer = green_beer << interlude << bold_style << interlude << abv << interlude << score
    
    puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
    puts "#{find_brewery[:brewery]}".bold
    puts " "
    puts "Type a beer name for more info.".yellow.bold
    puts complete_beer
    puts " "
    
    colored_beers = beers.collect do |beer|
      green_beer1 = "#{beer.name}".green.bold
      interlude1 = " | "
      bold_style1 = "#{beer.style.name}".red.bold
      abv1 = "#{beer.abv}".bold
      score1 = "#{beer.score}".yellow.bold
      complete_beer1 = green_beer1 << interlude1 << bold_style1 << interlude1 << abv1 << interlude1 << score1
      complete_beer1
    end
    
    puts colored_beers.uniq.sort
    puts " "
    puts complete_beer
    puts "Type a beer name for more info.".yellow.bold
    puts " "
    puts "#{find_brewery[:brewery]}".bold
    puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
    show_beer(take_input)
  else
    puts ""
    puts "Type '1':".bold
    show_brewery_input
  end
end
show_style(style) click to toggle source
# File lib/beer_advocate/cli.rb, line 224
def show_style(style)
  @find_style = beer_list.find do |listed_beer|
    listed_beer[:style].downcase == style.downcase
  end
  
  if BeerAdvocate::Scraper.find_url(find_style[:style_url]) == nil
    style_page_details = BeerAdvocate::Scraper.scrape_style_page(find_style[:style_url])
  else
    style_page_details = BeerAdvocate::Scraper.find_url_details(find_style[:style_url])
  end
  
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
  puts "#{find_style[:style]}".yellow.bold
  puts " "
  puts "#{style_page_details[:description]}"
  puts " "
  puts "#{style_page_details[:abv]}".bold
  puts "#{style_page_details[:ibu]}".bold
  puts "#{style_page_details[:glassware]}".bold
  puts " "
  puts "Press '1' for a list of beers of this style.".yellow.bold
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
  
  show_style_input
end
show_style_input() click to toggle source
# File lib/beer_advocate/cli.rb, line 180
def show_style_input
  case take_input
  when "1"
    beers = BeerAdvocate::Style.find_style(find_style[:style]).beers
    
    green_beer = "Name".green.bold
    interlude = " | "
    bold_brewery = "Brewery".red.bold
    abv = "ABV".bold
    score = "Score".yellow.bold
    complete_beer = green_beer << interlude << bold_brewery << interlude << abv << interlude << score
    
    puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
    puts "#{find_style[:style]}".bold
    puts " "
    puts "Type a beer name for more info.".yellow.bold
    puts complete_beer
    puts " "
    
    new_beers = beers.collect do |beer|
      green_beer1 = "#{beer.name}".green.bold
      interlude1 = " | "
      bold_brewery1 = "#{beer.brewery.name}".red.bold
      abv1 = "#{beer.abv}".bold
      score1 = "#{beer.score}".yellow.bold
      complete_beer1 = green_beer1 << interlude1 << bold_brewery1 << interlude1 << abv1 << interlude1 << score1
      complete_beer1
    end
    
    puts new_beers.uniq.sort
    puts " "
    puts complete_beer
    puts "Type a beer name for more info.".yellow.bold
    puts " "
    puts "#{find_style[:style]}".bold
    puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
    show_beer(take_input)
  else
    puts ""
    puts "Type '1':".bold
    show_style_input
  end
end
show_styles_list() click to toggle source
# File lib/beer_advocate/cli.rb, line 149
def show_styles_list
  @styles = @beer_list.collect do |beer|
    beer[:style]
  end
  @styles.uniq!
  @styles.sort!
  
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
  puts "Type a style number:".yellow.bold
  puts " "
  @styles.each do |style|
    puts "#{styles.index(style) + 1}. #{style}"
  end
  puts " "
  puts "Type a style number:".yellow.bold
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
  
  show_styles_list_input
end
show_styles_list_input() click to toggle source
# File lib/beer_advocate/cli.rb, line 169
def show_styles_list_input
  numerized_input = take_input.to_i
  if numerized_input.between?(1, @styles.length)
    show_style(@styles[numerized_input - 1])
  else
    puts ""
    puts "Invalid. Please type a style number:".bold
    show_styles_list_input
  end
end
take_input() click to toggle source
# File lib/beer_advocate/cli.rb, line 18
def take_input
  input = gets.strip.downcase
  if input == "exit"
    puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
    puts "Goodbye!"
    puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
    exit
  elsif input == "menu"
    run
  else
    input
  end
end
welcome() click to toggle source
# File lib/beer_advocate/cli.rb, line 8
def welcome
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
  beer_advocate_cli_text = "Beer Advocate CLI".yellow.bold
  puts("Welcome to the " << beer_advocate_cli_text << "! At any time, type 'exit' to quit the program, or 'menu' to return to this menu.")
  puts " "
  puts " 1. Browse by beer  || 3. Search by beer"
  puts " 2. Browse by style || 4. Search by brewery"
  puts " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ".light_blue
end
welcome_input() click to toggle source
# File lib/beer_advocate/cli.rb, line 337
def welcome_input
  case take_input
  when "1"
    beer_table_interaction
  when "2"
    show_styles_list
  when "3"
    puts ""
    puts "Type beer name:".bold
    show_beer(take_input)
  when "4"
    puts ""
    puts "Type brewery name:".bold
    show_brewery(take_input)
  else
    puts ""
    puts "Invalid. Please type 1-4:".bold
    welcome_input
  end
end