diff --git a/server.js b/server.js index 0d48d2c..1538ad9 100644 --- a/server.js +++ b/server.js @@ -2929,6 +2929,40 @@ cache(function(data, match, sendBadge, request) { }); })); +camp.route(/^\/cpan\/([^\/]+)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, +cache(function(data, match, sendBadge, request) { + var info = match[1]; // either `v` or `l` + var pkg = match[2]; // eg, Config-Augeas + var format = match[3]; + var badgeData = getBadgeData('cpan', data); + var url = 'https://api.metacpan.org/v0/release/'+pkg; + request(url, function(err, res, buffer) { + if (err != null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + return; + } + try { + var data = JSON.parse(buffer); + + if (info == 'v') { + var version = data.version; + var vdata = versionColor(version); + badgeData.text[1] = vdata.version; + badgeData.colorscheme = vdata.color; + } else if (info == 'l') { + var license = data.license[0]; + badgeData.text[1] = license; + badgeData.colorscheme = 'blue'; + } + sendBadge(format, badgeData); + } catch(e) { + badgeData.text[1] = 'invalid'; + sendBadge(format, badgeData); + } + }); +})); + // Any badge. camp.route(/^\/(:|badge\/)(([^-]|--)+)-(([^-]|--)+)-(([^-]|--)+)\.(svg|png|gif|jpg)$/, function(data, match, end, ask) { diff --git a/try.html b/try.html index 5591f28..8b2faef 100644 --- a/try.html +++ b/try.html @@ -370,6 +370,10 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable https://img.shields.io/apm/v/vim-mode.svg + CPAN: + + https://img.shields.io/cpan/v/Config-Augeas.svg +

Miscellaneous

@@ -442,6 +446,10 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable https://img.shields.io/cocoapods/l/AFNetworking.svg + CPAN: + + https://img.shields.io/cpan/l/Config-Augeas.svg + CocoaPods: https://img.shields.io/cocoapods/p/AFNetworking.svg