class BeerBash::BeerMenus::Scraper

Constants

BASE_URL

Public Instance Methods

places(name) click to toggle source
# File lib/beer_bash/beer_menus.rb, line 36
def places(name)
  page = scrape(places_url(name))
  links = page.links_with(href: %r"/places/\d+-") # like /places/12-some-place
  links.collect {|link| Place.new(link.to_s, link.href)}
end
taps(place_path) click to toggle source
# File lib/beer_bash/beer_menus.rb, line 42
def taps(place_path)
  page = scrape(taps_url(place_path))
  TapList.new(find_updated(page), find_taps(page))
end

Private Instance Methods

agent() click to toggle source
# File lib/beer_bash/beer_menus.rb, line 49
def agent
  @agent ||= Mechanize.new
end
find_taps(page) click to toggle source
# File lib/beer_bash/beer_menus.rb, line 71
def find_taps(page)
  page.search('//table[contains(@class,"beermenu")]/tbody/tr').each_with_object([]) do |row, beers|
    next unless row.element_children.size == 4 # some rows are for a description

    name   = row.at('td[1]').text.strip
    abv    = row.at('td[2]').text.strip
    format = row.at('td[3]').text.strip
    price  = row.at('td[4]').text.strip
    beer   = Beer.new(name, abv, format, price)
    beers  << beer if beer.on_tap?
  end
end
find_updated(page) click to toggle source
# File lib/beer_bash/beer_menus.rb, line 65
def find_updated(page)
  date = page.search('//div[contains(@class,"content")]/p[contains(text(),"Updated: ")]')
             .first.text.strip.match(/Updated: (.*)/)[1]
  Date.strptime(date, '%m/%d/%Y')
end
places_url(place_name) click to toggle source
# File lib/beer_bash/beer_menus.rb, line 57
def places_url(place_name)
  URI.escape("#{BASE_URL}/search?q=#{place_name}")
end
scrape(url) click to toggle source
# File lib/beer_bash/beer_menus.rb, line 53
def scrape(url)
  agent.get(url)
end
taps_url(place_path) click to toggle source
# File lib/beer_bash/beer_menus.rb, line 61
def taps_url(place_path)
  URI.escape("#{BASE_URL}/#{place_path}")
end