dub integration

- http://code.dlang.org
This commit is contained in:
Martin Nowak 2015-04-04 04:25:54 +02:00
parent 2fbb1b6bf0
commit a6563d2968
2 changed files with 119 additions and 0 deletions

View File

@ -3107,6 +3107,101 @@ cache(function(data, match, sendBadge, request) {
})}
));
// DUB download integration
camp.route(/^\/dub\/(dd|dw|dm|dt)\/([^\/]+)(?:\/([^\/]+))?\.(svg|png|gif|jpg|json)$/,
cache(function (data, match, sendBadge, request) {
var info = match[1]; // downloads (dd - daily, dw - weekly, dm - monthly, dt - total)
var pkg = match[2]; // package name, e.g. vibe-d
var version = match[3]; // version (1.2.3 or latest)
var format = match[4];
var apiUrl = 'http://code.dlang.org/api/packages/'+pkg;
if (version)
apiUrl += '/' + version;
apiUrl += '/stats';
var badgeData = getBadgeData('dub', data);
request(apiUrl, function(err, res, buffer) {
if (err != null) {
badgeData.text[1] = 'inaccessible';
sendBadge(format, badgeData);
}
try {
var data = JSON.parse(buffer);
if (info.charAt(0) === 'd') {
badgeData.text[0] = getLabel('downloads', data);
var downloads;
switch (info.charAt(1)) {
case 'm':
downloads = data.downloads.monthly;
badgeData.text[1] = metric(downloads) + '/month';
break;
case 'w':
downloads = data.downloads.weekly;
badgeData.text[1] = metric(downloads) + '/week';
break;
case 'd':
downloads = data.downloads.daily;
badgeData.text[1] = metric(downloads) + '/day';
break;
case 't':
downloads = data.downloads.total;
badgeData.text[1] = metric(downloads);
break;
}
if (version) {
badgeData.text[1] += ' ' + versionColor(version).version;
}
badgeData.colorscheme = downloadCountColor(downloads);
sendBadge(format, badgeData);
}
} catch(e) {
badgeData.text[1] = 'invalid';
sendBadge(format, badgeData);
}
});
}));
// DUB license and version integration
camp.route(/^\/dub\/(v|l)\/([^\/]+)\.(svg|png|gif|jpg|json)$/,
cache(function (data, match, sendBadge, request) {
var info = match[1]; // (v - version, l - license)
var pkg = match[2]; // package name, e.g. vibe-d
var format = match[3];
var apiUrl = 'http://code.dlang.org/api/packages/'+pkg;
if (info === 'v')
apiUrl += '/latest';
else if (info === 'l')
apiUrl += '/latest/info';
var badgeData = getBadgeData('dub', data);
request(apiUrl, function(err, res, buffer) {
if (err != null) {
badgeData.text[1] = 'inaccessible';
sendBadge(format, badgeData);
}
try {
var data = JSON.parse(buffer);
if (info === 'v') {
var vdata = versionColor(data);
badgeData.text[1] = vdata.version;
badgeData.colorscheme = vdata.color;
sendBadge(format, badgeData);
} else if (info == 'l') {
var license = data.info.license;
badgeData.text[0] = 'license';
if (license == null) {
badgeData.text[1] = 'Unknown';
} else {
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) {

View File

@ -271,6 +271,22 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable
<td><img src='/puppetforge/dt/camptocamp/openldap.svg' alt=''/></td>
<td><code>https://img.shields.io/puppetforge/dt/camptocamp/openldap.svg</code></td>
</tr>
<tr><th data-keywords='dub'> DUB: </th>
<td><img src='/dub/dd/vibe-d.svg' alt=''/></td>
<td><code>https://img.shields.io/dub/dd/vibe-d.svg</code></td>
</tr>
<tr><th data-keywords='dub'> DUB: </th>
<td><img src='/dub/dw/vibe-d.svg' alt=''/></td>
<td><code>https://img.shields.io/dub/dw/vibe-d.svg</code></td>
</tr>
<tr><th data-keywords='dub'> DUB: </th>
<td><img src='/dub/dm/vibe-d/latest.svg' alt=''/></td>
<td><code>https://img.shields.io/dub/dm/vibe-d/latest.svg</code></td>
</tr>
<tr><th data-keywords='dub'> DUB: </th>
<td><img src='/dub/dt/vibe-d/0.7.23.svg' alt=''/></td>
<td><code>https://img.shields.io/dub/dt/vibe-d/0.7.23.svg</code></td>
</tr>
</tbody></table>
<h3 id="version"> Version </h3>
<table class='badge'><tbody>
@ -382,6 +398,10 @@ Pixel-perfect &nbsp; Retina-ready &nbsp; Fast &nbsp; Consistent &nbsp; Hackable
<td><img src='/ctan/v/tex.svg' alt=''/></td>
<td><code>https://img.shields.io/ctan/v/tex.svg</code></td>
</tr>
<tr><th data-keywords='dub'> DUB: </th>
<td><img src='/dub/v/vibe-d.svg' alt=''/></td>
<td><code>https://img.shields.io/dub/v/vibe-d.svg</code></td>
</tr>
</tbody></table>
<h3 id="miscellaneous"> Miscellaneous </h3>
@ -529,6 +549,10 @@ Pixel-perfect &nbsp; Retina-ready &nbsp; Fast &nbsp; Consistent &nbsp; Hackable
<td><img src='/gem/u/raphink.svg' alt=''/></td>
<td><code>https://img.shields.io/gem/u/raphink.svg</code></td>
</tr>
<tr><th data-keywords='dub'> DUB: </th>
<td><img src='/dub/l/vibe-d.svg' alt=''/></td>
<td><code>https://img.shields.io/dub/l/vibe-d.svg</code></td>
</tr>
</tbody></table>
<h2 id="your-badge"> Your Badge </h2>