Factorize version color logic

Related to #349
This commit is contained in:
Thaddee Tyl 2015-01-15 23:51:48 +01:00
parent 173ab5263b
commit 45b12a458f

119
server.js
View File

@ -765,19 +765,12 @@ cache(function(data, match, sendBadge, request) {
}
try {
var data = JSON.parse(buffer);
var unstable = function(ver) { return /dev/.test(ver); };
// Grab the latest stable version, or an unstable
var versions = Object.keys(data.package.versions);
var version = latestVersion(versions);
badgeData.text[1] = version;
if (/^\d/.test(badgeData.text[1])) {
badgeData.text[1] = 'v' + version;
}
if (version[0] === '0' || /dev/.test(version)) {
badgeData.colorscheme = 'orange';
} else {
badgeData.colorscheme = 'blue';
}
var vdata = versionColor(version);
badgeData.text[1] = vdata.version;
badgeData.colorscheme = vdata.color;
sendBadge(format, badgeData);
} catch(e) {
badgeData.text[1] = 'invalid';
@ -881,12 +874,9 @@ cache(function(data, match, sendBadge, request) {
try {
var data = JSON.parse(buffer);
var version = data.version;
badgeData.text[1] = 'v' + version;
if (version[0] === '0' || /dev/.test(version)) {
badgeData.colorscheme = 'orange';
} else {
badgeData.colorscheme = 'blue';
}
var vdata = versionColor(version);
badgeData.text[1] = vdata.version;
badgeData.colorscheme = vdata.color;
sendBadge(format, badgeData);
} catch(e) {
badgeData.text[1] = 'invalid';
@ -986,12 +976,9 @@ cache(function(data, match, sendBadge, request) {
try {
var data = JSON.parse(buffer);
var version = data.version;
badgeData.text[1] = 'v' + version;
if (version[0] === '0' || /dev/.test(version)) {
badgeData.colorscheme = 'orange';
} else {
badgeData.colorscheme = 'blue';
}
var vdata = versionColor(version);
badgeData.text[1] = vdata.version;
badgeData.colorscheme = vdata.color;
sendBadge(format, badgeData);
} catch(e) {
badgeData.text[1] = 'invalid';
@ -1106,12 +1093,9 @@ cache(function(data, match, sendBadge, request) {
sendBadge(format, badgeData);
} else if (info === 'v') {
var version = data.info.version;
badgeData.text[1] = 'v' + version;
if (version[0] === '0' || /dev/.test(version)) {
badgeData.colorscheme = 'orange';
} else {
badgeData.colorscheme = 'blue';
}
var vdata = versionColor(version);
badgeData.text[1] = vdata.version;
badgeData.colorscheme = vdata.color;
sendBadge(format, badgeData);
} else if (info == 'l') {
var license = data.info.license;
@ -1148,15 +1132,9 @@ cache(function(data, match, sendBadge, request) {
// Grab the latest stable version, or an unstable
var versions = data.versions;
var version = latestVersion(versions);
badgeData.text[1] = version;
if (/^\d/.test(badgeData.text[1])) {
badgeData.text[1] = 'v' + version;
}
if (version[0] === '0' || /dev/.test(version)) {
badgeData.colorscheme = 'orange';
} else {
badgeData.colorscheme = 'blue';
}
var vdata = versionColor(version);
badgeData.text[1] = vdata.version;
badgeData.colorscheme = vdata.color;
sendBadge(format, badgeData);
} catch(e) {
badgeData.text[1] = 'invalid';
@ -1200,12 +1178,9 @@ cache(function(data, match, sendBadge, request) {
sendBadge(format, badgeData);
} else if (info === 'v') {
var version = data.releases[0].version;
badgeData.text[1] = 'v' + version;
if (version[0] === '0' || /dev/.test(version)) {
badgeData.colorscheme = 'orange';
} else {
badgeData.colorscheme = 'blue';
}
var vdata = versionColor(version);
badgeData.text[1] = vdata.version;
badgeData.colorscheme = vdata.color;
sendBadge(format, badgeData);
} else if (info == 'l') {
var license = (data.meta.licenses || []).join(', ');
@ -1789,17 +1764,9 @@ cache(function(data, match, sendBadge, request) {
}
var data = JSON.parse(buffer);
var tag = data[0].name;
badgeData.text[1] = tag;
badgeData.colorscheme = 'blue';
if (/^v[0-9]/.test(tag)) {
tag = tag.slice(1);
}
if (/^[0-9]/.test(tag)) {
badgeData.text[1] = 'v' + tag;
if (tag[0] === '0' || /dev/.test(tag)) {
badgeData.colorscheme = 'orange';
}
}
var vdata = versionColor(tag);
badgeData.text[1] = vdata.version;
badgeData.colorscheme = vdata.color;
sendBadge(format, badgeData);
} catch(e) {
badgeData.text[1] = 'none';
@ -1839,17 +1806,9 @@ cache(function(data, match, sendBadge, request) {
var prerelease = !!data.filter(function(versionData) {
return version === versionData.tag_name;
})[0].prerelease;
badgeData.text[1] = version;
var vdata = versionColor(version);
badgeData.text[1] = vdata.version;
badgeData.colorscheme = prerelease ? 'orange' : 'blue';
if (/^v[0-9]/.test(version)) {
version = version.slice(1);
}
if (/^[0-9]/.test(version)) {
badgeData.text[1] = 'v' + version;
if (version[0] === '0' || /dev/.test(version)) {
badgeData.colorscheme = 'orange';
}
}
sendBadge(format, badgeData);
} catch(e) {
badgeData.text[1] = 'none';
@ -1987,12 +1946,9 @@ cache(function(data, match, sendBadge, request) {
try {
var data = JSON.parse(buffer);
var version = data.version;
badgeData.text[1] = 'v' + version;
if (version[0] === '0' || /dev/.test(version)) {
badgeData.colorscheme = 'orange';
} else {
badgeData.colorscheme = 'blue';
}
var vdata = versionColor(version);
badgeData.text[1] = vdata.version;
badgeData.colorscheme = vdata.color;
sendBadge(format, badgeData);
} catch(e) {
badgeData.text[1] = 'invalid';
@ -2387,12 +2343,9 @@ cache(function(data, match, sendBadge, request) {
})
.on('end', function(version) {
try {
badgeData.text[1] = 'v' + version;
if (version[0] === '0' || /dev/.test(version)) {
badgeData.colorscheme = 'orange';
} else {
badgeData.colorscheme = 'blue';
}
var vdata = versionColor(version);
badgeData.text[1] = vdata.version;
badgeData.colorscheme = vdata.color;
sendBadge(format, badgeData);
} catch(e) {
badgeData.text[1] = 'void';
@ -3066,6 +3019,20 @@ function downloadCountColor(downloads) {
}
}
function versionColor(version) {
var first = version[0];
if (first === 'v') {
first = version[1];
} else {
version = 'v' + version;
}
if (first === '0' || (version.indexOf('-') !== -1)) {
return { version: version, color: 'orange' };
} else {
return { version: version, color: 'blue' };
}
}
// Given a list of versions (as strings), return the latest version.
function latestVersion(versions) {
var version = '';