update gem downloads count

This commit is contained in:
bogdanRada 2014-07-15 11:26:56 +03:00
parent 0baa320968
commit f25f310856
2 changed files with 57 additions and 35 deletions

View File

@ -590,22 +590,63 @@ cache(function(data, match, sendBadge) {
});
}));
// Gem download count for latest version.
camp.route(/^\/gem\/dtv\/(.*)\.(svg|png|gif|jpg)$/,
// Gem download count
camp.route(/^\/gem\/(dt|dtv|dv)\/(.*)\.(svg|png|gif|jpg)$/,
cache(function(data, match, sendBadge) {
var repo = match[1]; // eg, rails.
var format = match[2];
var apiUrl = 'https://rubygems.org/api/v1/gems/' + repo + '.json';
var info = match[1];
var site = match[2];
var splited_url = site.split('/');
var repo = splited_url[0];
var version = (splited_url.length > 1) ? splited_url[splited_url.length - 1] : null;
version = (version === "stable") ? version : semver.valid(version);
var format = match[3];
var badgeData = getBadgeData('downloads', data);
var apiUrl = 'https://rubygems.org/api/v1/gems/' + repo + '.json';
if (info === "dv"){
apiUrl = 'https://rubygems.org/api/v1/versions/' + repo + '.json';
}
request(apiUrl, { headers: { 'Accept': 'application/atom+json,application/json' } }, function(err, res, buffer) {
if (err != null) {
badgeData.text[1] = 'inaccessible';
sendBadge(format, badgeData);
}
try {
var data = JSON.parse(buffer);
var downloads = data.version_downloads;
badgeData.text[1] = metric(downloads) + ' latest version';
var data = JSON.parse(buffer);
if (info === "dt") {
var downloads = metric(data.downloads) + " total";
}
else if (info === "dtv") {
var downloads = metric(data.version_downloads) + " latest version";
}
else if (info === "dv") {
var downloads = "invalid";
if (version !== null && version === "stable") {
var versions = data.filter(function(ver) {
return ver.prerelease === false;
}).map(function(ver) {
return ver.number;
});
var stable_version = latestVersion(versions); // found latest stable version
var version_data = data.filter(function(ver) {
return ver.number === stable_version;
})[0];
downloads = metric(version_data.downloads_count) + " stable version";
}
else if (version !== null) {
var version_data = data.filter(function(ver) {
return ver.number === version;
})[0]
downloads = metric(version_data.downloads_count) + " version " + version;
}
}
else {
var downloads = "invalid";
}
badgeData.text[1] =downloads;
badgeData.colorscheme = downloadCountColor(downloads);
sendBadge(format, badgeData);
} catch(e) {
@ -615,33 +656,6 @@ cache(function(data, match, sendBadge) {
});
}));
// Gem total download count
camp.route(/^\/gem\/dt\/(.*)\.(svg|png|gif|jpg)$/,
cache(function(data, match, sendBadge) {
var repo = match[1]; // eg, rails.
var format = match[2];
var apiUrl = 'https://rubygems.org/api/v1/gems/' + repo + '.json';
var badgeData = getBadgeData('downloads', data);
request(apiUrl, { headers: { 'Accept': 'application/atom+json,application/json' } }, function(err, res, buffer) {
if (err != null) {
badgeData.text[1] = 'inaccessible';
sendBadge(format, badgeData);
}
try {
var data = JSON.parse(buffer);
var downloads = data.downloads;
badgeData.text[1] = metric(downloads) + ' total';
badgeData.colorscheme = downloadCountColor(downloads);
sendBadge(format, badgeData);
} catch(e) {
badgeData.text[1] = 'invalid';
sendBadge(format, badgeData);
}
});
}));
// PyPI integration.
camp.route(/^\/pypi\/([^\/]+)\/(.*)\.(svg|png|gif|jpg)$/,
cache(function(data, match, sendBadge) {

View File

@ -167,6 +167,14 @@ I made the GitHub Badge Service.
</tbody></table>
<h3> Downloads </h3>
<table><tbody>
<tr><th> Gem </th>
<td><img src='/gem/dv/rails/stable.svg' alt=''/></td>
<td><code>http://img.shields.io/gem/dv/rails/stable.svg</code></td>
</tr>
<tr><th> Gem </th>
<td><img src='/gem/dv/rails/4.1.0.svg' alt=''/></td>
<td><code>http://img.shields.io/gem/dv/rails/4.1.0.svg</code></td>
</tr>
<tr><th> Gem </th>
<td><img src='/gem/dtv/rails.svg' alt=''/></td>
<td><code>http://img.shields.io/gem/dtv/rails.svg</code></td>