Skip to content

Commit

Permalink
feat: add wikiapiary extension badge
Browse files Browse the repository at this point in the history
  • Loading branch information
SethFalco committed Jul 1, 2021
1 parent d4cfddd commit 3529906
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 0 deletions.
64 changes: 64 additions & 0 deletions services/wikiapiary/wikiapiary-extension.service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
'use strict'

const Joi = require('joi')
const { metric } = require('../text-formatters')
const { BaseJsonService } = require('..')

const schema = Joi.object({
query: Joi.object({
results: Joi.object()
.required()
.pattern(/^.+:.+$/, {
printouts: Joi.object({
'Has website count': Joi.array()
.required()
.items(Joi.number().required()),
}).required(),
}),
}).required(),
}).required()

/**
* This badge displays the total usages of a MediaWiki extensions via
* Wikiapiary.
*
* {@link https://www.mediawiki.org/wiki/Manual:Extensions MediaWiki Extensions Manual}
*/
module.exports = class WikiapiaryExtension extends BaseJsonService {
static category = 'downloads'
static route = {
base: 'wikiapiary/extensions',
pattern: ':type/:extension',
}

static examples = [
{
title: 'Wikiapiary extension usage',
namedParams: { type: 'Extension', extension: 'ParserFunctions' },
staticPreview: this.render({ usage: 11170 }),
keywords: ['mediawiki'],
},
]

static defaultBadgeData = { label: 'usage', color: 'informational' }

static render({ usage }) {
return { message: metric(usage) }
}

async fetch({ type, extension }) {
return this._requestJson({
schema,
url: `https://wikiapiary.com/w/api.php?action=ask&query=[[${type}:${extension}]]|?Has_website_count&format=json`,
})
}

async handle({ type, extension }) {
const response = await this.fetch({ type, extension })
const [usage] =
response.query.results[`${type}:${extension}`].printouts[
'Has website count'
]
return this.constructor.render({ usage })
}
}
12 changes: 12 additions & 0 deletions services/wikiapiary/wikiapiary-extension.tester.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
'use strict'

const t = (module.exports = require('../tester').createServiceTester())
const { isMetric } = require('../test-validators')

t.create('Extension')
.get('/Extension/ParserFunctions.json')
.expectBadge({ label: 'usage', message: isMetric })

t.create('Skins')
.get('/Skin/Vector.json')
.expectBadge({ label: 'usage', message: isMetric })

0 comments on commit 3529906

Please sign in to comment.