kopia lustrzana https://github.com/badgen/badgen.net
live-fns: add RubyGems support (#79)
* feat: rubygems support * style: resolve spacing issuespull/82/head
rodzic
bb61879d9d
commit
d4e67ff629
|
@ -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'],
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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'
|
||||
}
|
||||
}
|
||||
}
|
Ładowanie…
Reference in New Issue