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