1. Add validation to BaseSvgScrapingService and update readthedocs accordingly. 2. Rewrite vso and add more tests. Rename it internally to azure-devops. URLs are still `/vso` for now. Should we make a way to let a service register multiple URL patterns? 3. Handle shared code using a functional pattern instead of inheritance. This comes from a discussion https://github.com/badges/shields/pull/2031#issuecomment-417893819. I like the functional approach because it's more direct, nimble, and easy to reason about; plus it allows services to grow from a family of one to two more easily.
26 lines
819 B
JavaScript
26 lines
819 B
JavaScript
'use strict'
|
|
|
|
const caller = require('caller')
|
|
const ServiceTester = require('./service-tester')
|
|
const BaseService = require('./base')
|
|
|
|
// Automatically create a ServiceTester.
|
|
//
|
|
// When run from e.g. `gem-rank.tester.js`, this will create a tester that
|
|
// attaches to the service found in `gem-rank.service.js`.
|
|
//
|
|
// This can't be used for `.service.js` files which export more than one
|
|
// service.
|
|
function createServiceTester() {
|
|
const servicePath = caller().replace('.tester.js', '.service.js')
|
|
const ServiceClass = require(servicePath)
|
|
if (!(ServiceClass.prototype instanceof BaseService)) {
|
|
throw Error(
|
|
`${servicePath} does not export a single service. Invoke new ServiceTester() directly.`
|
|
)
|
|
}
|
|
return ServiceTester.forServiceClass(ServiceClass)
|
|
}
|
|
|
|
module.exports = createServiceTester
|