Beer List
A utility for retrieving the beer list from various establishments
Usage
Installation
gem install beer_list
or in your gemfile:
gem 'beer_list'
then require the gem:
require 'beer_list'
Getting a List
See what's on tap:
# An array-like object
list = BeerList.groveland_tap
# As a hash
list.to_hash
# As JSON
list.to_json
Establishments
Establishments peddle delicious beers. You're interested in which delicious beers a given establishment is peddling. To reconcile this situation, you need one or more BeerList::Establishments. BeerList ships with a limited number of establishments, but its easy to extend BeerList with more.
First, let's try one out of the box:
bulldog_northeast = BeerList::Establishments::BulldogNortheast.new
# Now get the list
bulldog_northeast.list
You may want to get lists for more than one establishment at a time. To do so, register the desired establishments in BeerList.establishments:
three_squares = BeerList::Establishments::ThreeSquares.new
muddy_waters = BeerList::Establishments::MuddyWaters.new
# Register establishments
BeerList.add_establishments(three_squares, muddy_waters)
# See your registered establishments
BeerList.establishments
# Get the beer lists at your registered establishments.
# as an array of BeerList::List objects
BeerList.lists
# As a hash
BeerList.lists_as_hash
# As JSON
BeerList.lists_as_json
The Lists will be memoized until the content of BeerList.establishments changes so that the establishments don't have to be re-scraped each time the list is requested.
Extending BeerList with More Establishments
BeerList includes an executable to easily create your own establishments.
For example:
$ beer_list establish Applebirds -u http://applebirds.com/beers -d path/to/establishments
will create the following code in path/to/establishments/applebirds.rb
module BeerList
module Establishments
class Applebirds < Establishment
URL = 'http://applebirds.com/beers'
# Handles parsing and manipulating a Mechanize::Page object
# in order to scrape the contents of your beer list.
#
# Uncomment and implement to your liking.
def get_list
# page.search('.selector').map(&:text)
end
def url
URL
end
end
end
end
For all options you can pass to beer_list establish, run:
$ beer_list help establish
Using Your Generated Establishments
So you've written some pretty bad-ass scrapers now, and you're ready to actually use the fruit of your labor in a real application. You'll need to tell BeerList about the generated files so that it can require them. If you're using Rails, add the following code in an initializer:
BeerList.configure do |c|
c.establishments_dir = File.join(Rails.root, 'path/to/establishments')
end
Then in your app:
# Fetch just the list at Applebirds
BeerList.applebirds
# Or, register your establishment
BeerList.add_establishment(BeerList::Establishments::Applebirds.new)
# fetch all your registered lists, including the one at Applebirds
BeerList.lists
See Getting A List for more details.
AND...
Checkout This link for more on Mechanize
Sending Lists
Once you have lists, you can use them locally (obviously), or you can send them elsewhere. Configure BeerList with a default URL like this:
BeerList.configure do |c|
c.default_url = 'https://yourapp.com/some_sweet_beer_route'
end
Then in your code, send a list!
applebirds = BeerList.applebirds
# POSTs your list to your default_url as JSON under the "beer_list" name
BeerList.send_list(applebirds)
# You can also give it an explicit URL
other_route = 'http://myotherapp.com/another_beer_route'
BeerList.send_list(applebirds, other_route)
# Register some lists and send 'em all at once:
thursdays = BeerList::Establishments::Thursdays.new
BeerList.add_establishments(applebirds, thursdays)
BeerList.send_lists
Both .send_list and .send_lists accept an optional URL as the last argument. If you don't pass one, it will use the default in your configuration. If neither doesn't exist, it will raise an error.
Leads
If you're out of ideas on what establishments you may want lists for, fear not: BeerList can give you some ideas.
# You might be interested in good beer bars located in California:
cali = BeerList::Leads::CA.new
# returns a BeerList::List of URLs for popular beer bars in California
cali.list
# Maybe you want Wisconsin:
wi = BeerList::Leads:WI.new
wi.list
So far, support for this feature is limited to the United States. Hopefully, I can expand it in the not-too-distant future.
CLI
In addition to the establish command, which generates Establishment files for you, BeerList also offers a few other commands:
There's the list
command. For example,
say you have the following two establishments a directory called ~/my_beer_lists:
applebirds.rb
thursdays.rb
You can get the beer lists for these places from the command line:
$ beer_list list applebirds -d ~/my_beer_lists
# or
$ beer_list list applebirds thursdays -d ~/my_beer_lists
# pass -j for JSON
$ beer_list list applebirds thursdays -j -d ~/my_beer_lists
There's also the send
command for sending your lists to a given URL:
$ beer_list send applebirds thursdays -u 'http://mybeerapiendpoint.com/beer_list'
See $ beer_list help
for all commands