From acf16d61e77ac687ca96ddda9dd324fdf278d033 Mon Sep 17 00:00:00 2001 From: Ricky Elrod Date: Wed, 5 Feb 2014 04:38:15 -0500 Subject: [PATCH] Add Hackage support! --- server.js | 41 +++++++++++++++++++++++++++++++++++++++++ web/index.html | 3 +++ 2 files changed, 44 insertions(+) diff --git a/server.js b/server.js index 04ff79b..c47442c 100644 --- a/server.js +++ b/server.js @@ -512,6 +512,47 @@ cache(function(data, match, sendBadge) { req.end(); })); +// Hackage version integration. +camp.route(/^\/hackage\/v\/(.*)\.(svg|png|gif|jpg)$/, +cache(function(data, match, sendBadge) { + var repo = match[1]; // eg, `lens`. + var format = match[2]; + var apiUrl = 'https://hackage.haskell.org/package/' + repo + '/' + repo + '.cabal'; + var label = getLabel('hackage', data); + var badgeData = {text:[label, 'n/a'], colorscheme:'lightgrey'}; + https.get(apiUrl, function(res) { + var buffer = ''; + res.on('data', function(chunk) { buffer += ''+chunk; }); + res.on('end', function(chunk) { + if (chunk) { buffer += ''+chunk; } + try { + var lines = buffer.split("\n"); + var versionLines = lines.filter(function(e) { + return (/^version:/i).test(e) === true; + }); + // We don't have to check length of versionLines, because if we throw, + // we'll render the 'invalid' badge below, which is the correct thing + // to do. + var version = versionLines[0].replace(/\s+/, '').split(/:/)[1]; + } catch(e) { + badgeData.text[1] = 'invalid'; + sendBadge(format, badgeData); + return; + } + badgeData.text[1] = 'v' + version; + if (version[0] === '0') { + badgeData.colorscheme = 'orange'; + } else { + badgeData.colorscheme = 'blue'; + } + sendBadge(format, badgeData); + }); + }).on('error', function(e) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + }); +})); + // Any badge. camp.route(/^\/(:|badge\/)(([^-]|--)+)-(([^-]|--)+)-(([^-]|--)+)\.(svg|png|gif|jpg)$/, function(data, match, end, ask) { diff --git a/web/index.html b/web/index.html index 7a51f2d..dbbac8c 100644 --- a/web/index.html +++ b/web/index.html @@ -141,6 +141,9 @@ I made the GitHub Badge Service. Gem: Gem http://img.shields.io/gem/v/formatador.svg + Hackage: + Gem + http://img.shields.io/hackage/v/lens.svg