contributor
Version:
A simple module to add git contributors to your package.json.
140 lines (128 loc) • 3.51 kB
JavaScript
/*
* contributor.js: a package.json contributor customizer
*
* (C) 2014 Jake LeBoeuf
* MIT LICENCE
*
*/
var path = require('path'),
fs = require('fs'),
request = require('request'),
_ = require('underscore'),
color = require("ansi-color").set,
rootDir = process.cwd(),
sourceJson = path.join(rootDir, 'package.json'),
dupJson = path.join(rootDir, '.package.json'),
pack = require(sourceJson),
contribApi = pack.repository.url.split('/');
//
// Contributor Module + Defaults
//
var contributor = module.exports = {
complete: 0
};
//
// Main Magic
//
contributor.start = function (next) {
//
// Request info from github repo
//
var options = {
url: 'https://api.github.com/repos/'+
contribApi[3]+
'/'+contribApi[4].split('.')[0]+
'/contributors',
headers: {
'User-Agent': 'request'
}
};
function callback(error, response, body) {
if(response.statusCode === 403) {
console.log(color('✖', 'red+bold'),
color('You\'ve exceeded github\'s API limit. Try again in a minute or two.',
'red+bold'));
}
if (!error && response.statusCode === 200) {
var info = JSON.parse(body);
var contributors = [];
i=0;
info.forEach(function(contributor){
var contributions = 0;
//
// User info request
//
var userOptions = {
url: contributor.url,
headers: {
'User-Agent': 'request'
}
};
function userCallback(error, response, body) {
if (!error && response.statusCode === 200) {
var userInfo = JSON.parse(body);
var user = new Object();
user.name = userInfo.name;
user.email = userInfo.email;
user.url = userInfo.html_url;
user.contributions = contributor.contributions;
user.hireable = userInfo.hireable;
contributors.push(user);
}
i++;
if(i == info.length){
saveData(sourceJson, contributors);
}
}
// Make user info request
request(userOptions, userCallback);
});
}
}
// Make request for info from repo
request(options, callback);
//
// Save new file
//
function saveData(file, data) {
if (!fs.existsSync(dupJson)) {
// Save backup to .package.json
fs.writeFile(dupJson, JSON.stringify(pack, null, 2), function(err) {
if(err) {
new Error(err);
} else {
console.log(color("✔", "green+bold"),
"Saved a backup as",
color(".package.json", "magenta"));
status();
writePackage();
}
});
} else {
status();
writePackage();
}
// Rewrite package.json
// Fill the array with list from github
pack.contributors = data;
function writePackage() {
fs.writeFile(file, JSON.stringify(pack, null, 2), function(err) {
if(err) {
console.log(err);
} else {
console.log(color("✔", "green+bold"),
"Contributors added to your",
color("package.json", "magenta"),
'from Github');
status();
}
});
}
function status() {
contributor.complete ++;
if(contributor.complete === 2) {
console.log(color("✔", "green+bold"), "All done");
}
}
}
}