Refactor [Wordpress] Service (#2152)

This commit is contained in:
Tagan Hoyle
2018-10-27 12:59:43 +02:00
committed by Pierre-Yves B
parent 979a34b831
commit 60592b8547
13 changed files with 999 additions and 368 deletions

View File

@@ -0,0 +1,67 @@
'use strict'
const BaseJsonService = require('../base-json')
const Joi = require('joi')
const { NotFound } = require('../errors')
const { nonNegativeInteger } = require('../validators')
const foundSchema = Joi.object()
.keys({
version: Joi.string(),
rating: nonNegativeInteger,
num_ratings: nonNegativeInteger,
downloaded: nonNegativeInteger,
active_installs: nonNegativeInteger,
requires: Joi.string(), // Plugin Only
tested: Joi.string(), // Plugin Only
})
.required()
const notFoundSchema = Joi.string().allow(null, false)
const schemas = Joi.alternatives(foundSchema, notFoundSchema)
module.exports = class BaseWordpress extends BaseJsonService {
static get extensionType() {
throw new Error(`extensionType() function not implemented for ${this.name}`)
}
async fetch({ slug }) {
const url = `https://api.wordpress.org/${
this.constructor.extensionType
}s/info/1.1/`
return this._requestJson({
url,
schema: schemas,
options: {
qs: {
action: `${this.constructor.extensionType}_information`,
request: {
slug: slug,
fields: {
active_installs: 1,
sections: 0,
homepage: 0,
tags: 0,
screenshot_url: 0,
},
},
},
qsStringifyOptions: {
encode: false,
},
},
})
}
async handle({ slug }) {
const json = await this.fetch({ slug })
if (!json) {
throw new NotFound()
}
return this.constructor.render({ response: json })
}
}