From 4154eadbca0bfc52f5e7ede7a0fde31fca5f41fc Mon Sep 17 00:00:00 2001 From: Thaddee Tyl Date: Mon, 6 Jan 2014 15:48:03 +0100 Subject: [PATCH] Gem Integration. Part of issue #16. --- server.js | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/server.js b/server.js index 58fdff87f4..be03ced48c 100644 --- a/server.js +++ b/server.js @@ -194,7 +194,41 @@ function(data, match, end, ask) { return; } badgeData.text[1] = version; - if (version.split('.')[0] === 0) { + if (version[0] === '0' || /dev/.test(version)) { + badgeData.colorscheme = 'orange'; + } else { + badgeData.colorscheme = 'blue'; + } + badge(badgeData, makeSend(format, ask.res, end)); + }); + }).on('error', function(e) { + badgeData.text[1] = 'inaccessible'; + badge(badgeData, makeSend(format, ask.res, end)); + }); +}); + +// Gem version integration. +camp.route(/^\/gem\/v\/(.*)\.(svg|png|gif|jpg)$/, +function(data, match, end, ask) { + var repo = match[1]; // eg, `localeval`. + var format = match[2]; + var apiUrl = 'https://rubygems.org/api/v1/gems/' + repo + '.json'; + var badgeData = {text:['gem', '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 data = JSON.parse(buffer); + var version = data.version; + } catch(e) { + badgeData.text[1] = 'invalid'; + badge(badgeData, makeSend(format, ask.res, end)); + return; + } + badgeData.text[1] = version; + if (version[0] === '0' || /dev/.test(version)) { badgeData.colorscheme = 'orange'; } else { badgeData.colorscheme = 'blue';