live-fns: add RubyGems support (#79)

* feat: rubygems support

* style: resolve spacing issues
pull/82/head
Brian Faust 2018-08-06 11:02:29 +03:00 zatwierdzone przez Amio /
rodzic bb61879d9d
commit d4e67ff629
3 zmienionych plików z 111 dodań i 0 usunięć

Wyświetl plik

@ -156,6 +156,15 @@ Available query params:
['github issues', '/packagist/ghi/monolog/monolog'],
['language', '/packagist/lang/monolog/monolog'],
],
rubygems: [
['version (stable)', '/rubygems/v/rails'],
['version (pre)', '/rubygems/v/rails/pre'],
['version (latest)', '/rubygems/v/rails/latest'],
['total downloads', '/rubygems/dt/rails'],
['version downloads', '/rubygems/dv/rails'],
['name', '/rubygems/n/rails'],
['platform', '/rubygems/p/rails'],
],
/* CIs */
travis: [
['build', '/travis/babel/babel'],

Wyświetl plik

@ -18,6 +18,7 @@ module.exports = {
'packagephobia': require('./packagephobia.js'),
'packagist': require('./packagist.js'),
'pypi': require('./pypi.js'),
'rubygems': require('./rubygems.js'),
'runkit': require('./runkit.js'),
'travis': require('./travis.js'),
'uptime-robot': require('./uptime-robot.js')

Wyświetl plik

@ -0,0 +1,101 @@
const millify = require('millify')
const axios = require('../axios.js')
const semColor = require('../utils/sem-color.js')
const preConditions = ['.rc', '.beta', '-rc', '-beta']
const pre = versions => versions.filter(v => {
for (let condition of preConditions) {
if (!v.includes(condition)) {
return false
}
}
return true
})
const stable = versions => versions.filter(v => {
for (let condition of preConditions) {
if (v.includes(condition)) {
return false
}
}
return true
})
const latest = versions => versions.length > 0 && versions.slice(-1)[0]
const request = async endpoint => {
return axios.get(`https://rubygems.org/api/v1/${endpoint}.json`).then(res => res.data)
}
module.exports = async function (topic, gem, channel = 'stable') {
let response
if (topic !== 'v') {
response = await request(`gems/${gem}`)
}
switch (topic) {
case 'v':
response = await request(`versions/${gem}`)
const versions = Object
.values(response)
.map(value => value.number)
.reverse()
let version = ''
switch (channel) {
case 'latest':
version = latest(versions)
break
case 'pre':
version = latest(pre(versions))
break
default:
version = latest(stable(versions))
}
version = version || latest(versions)
return {
subject: 'rubygems',
status: version || 'unknown',
color: semColor(version)
}
case 'dt':
return {
subject: 'downloads',
status: millify(response.downloads),
color: 'green'
}
case 'dv':
return {
subject: 'downloads',
status: millify(response.version_downloads) + '/version',
color: 'green'
}
case 'n':
return {
subject: 'rubygems',
status: response.name,
color: 'green'
}
case 'p':
return {
subject: 'platform',
status: response.platform,
color: 'green'
}
default:
return {
subject: 'rubygems',
status: 'unknown',
color: 'grey'
}
}
}