made-in
Version:
Get GitHub projects created by users from a specific location.
74 lines (67 loc) • 2 kB
JavaScript
;
var GitHub = require("gh.js"),
ul = require("ul"),
bindy = require("bindy"),
sameTime = require("same-time");
/**
* madeIn
* Get GitHub projects created by users from a specific location.
*
* @name madeIn
* @function
* @param {String} loc The user location.
* @param {Object} options An object containing the following fields:
*
* - language (String): The repository language.
* - token (String): The GitHub token.
*
* @param {Function} cb The callback function.
*/
module.exports = function madeIn(loc, options, cb) {
options = ul.merge(options, {
language: "",
token: undefined
});
if (options.language) {
options.language = "language:\"" + options.language + "\"";
}
var gh = new GitHub(options.token);
gh.get("search/users", {
opts: {
q: "location:" + loc + " " + options.language,
sort: "followers"
// 30 requests per minute
// - 1 for users
// - 29 requests (one for each user)
, per_page: 29
}
}, function (err, data) {
if (err) {
return cb(err);
}
var users = data.items;
var repos = [];
sameTime(bindy(users, function (cUser, done) {
gh.get("search/repositories", {
opts: {
q: "user:" + cUser.login + " fork:false stars:>1 " + options.language,
sort: "stars"
}
}, function (err, data) {
if (err) {
data = { items: [] };
}
repos = repos.concat(data.items);
done();
});
}), function (err, data) {
if (err) {
return cb(err);
}
repos.sort(function (a, b) {
return a.stargazers_count < b.stargazers_count ? 1 : -1;
});
cb(null, repos);
});
});
};