restaurants
Version:
Search a service and get a list of restaurants.
73 lines (62 loc) • 1.44 kB
JavaScript
/**
* Dependencies
*/
var doWhilst = require('async').doWhilst
, get = require('superagent').get
, nameToAbbr = require('./states').nameToAbbr;
/**
* OpenTable Constants
*/
var ENDPOINT = 'http://opentable.heroku.com/api/restaurants';
/**
* Expose search function
*/
module.exports = function(address, all, callback) {
var query = {
page: 1
};
if (address.state) query.state = nameToAbbr[address.state];
if (address.city) query.city = address.city;
if (address.zip && !isNaN(address.zip)) query.zip = address.zip;
if (address.street) query.street = address.street;
if (all) {
var data = []
, last_data = [];
doWhilst(
function(next) {
last_data = null;
getRestaurants(query, function(err, restaurants) {
if (err) {
next(err);
} else {
data = data.concat(restaurants);
last_data = restaurants;
query.page++;
next();
}
});
}
, function() {
return last_data && last_data.length > 0;
}
, function(err) {
callback(err, data);
});
} else {
getRestaurants(query, callback);
}
};
/**
* Get the restaurants for a query
*/
function getRestaurants(query, callback) {
get(ENDPOINT)
.query(query)
.end(function(err, res) {
if (err) {
callback(err);
} else {
callback(err, res.body.restaurants);
}
});
}