diff --git a/server.js b/server.js index 3202edb..6c95b4e 100644 --- a/server.js +++ b/server.js @@ -210,21 +210,19 @@ cache(function(data, match, sendBadge) { try { var data = JSON.parse(buffer); var version; - var unstable = function(ver) { - return /dev/.test(ver); - }; + var unstable = function(ver) { return /dev/.test(ver); }; // Grab the latest stable version, or an unstable - for (var v in data.package.versions) { - v = data.package.versions[v]; + for (var versionName in data.package.versions) { + var current = data.package.versions[versionName]; - if (version) { - if (/dev/.test(version.version) && !/dev/.test(v.version)) { - version = v; - } else if (version.version_normalized < v.version_normalized) { - version = v; + if (version !== undefined) { + if (unstable(version.version) && !unstable(current.version)) { + version = current; + } else if (version.version_normalized < current.version_normalized) { + version = current; } } else { - version = v; + version = current; } } version = version.version.replace(/^v/, ""); @@ -245,6 +243,48 @@ cache(function(data, match, sendBadge) { }); })); +// Packagist license integration. +camp.route(/^\/packagist\/l\/(.*)\.(svg|png|gif|jpg)$/, +cache(function(data, match, sendBadge) { + var userRepo = match[1]; + var format = match[2]; + var apiUrl = 'https://packagist.org/packages/' + userRepo + '.json'; + var badgeData = getBadgeData('license', data); + request(apiUrl, function(err, res, buffer) { + if (err != null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + } + try { + var data = JSON.parse(buffer); + // Note: if you change the latest version detection algorithm here, + // change it above (for the actual version badge). + var version; + var unstable = function(ver) { return /dev/.test(ver); }; + // Grab the latest stable version, or an unstable + for (var versionName in data.package.versions) { + var current = data.package.versions[versionName]; + + if (version !== undefined) { + if (unstable(version.version) && !unstable(current.version)) { + version = current; + } else if (version.version_normalized < current.version_normalized) { + version = current; + } + } else { + version = current; + } + } + badgeData.text[1] = version.license[0]; + badgeData.colorscheme = 'red'; + sendBadge(format, badgeData); + } catch(e) { + badgeData.text[1] = 'invalid'; + sendBadge(format, badgeData); + } + }); +})); + // npm integration. camp.route(/^\/npm\/dm\/(.*)\.(svg|png|gif|jpg)$/, cache(function(data, match, sendBadge) {