From 3544ea03f8a5c872777811e939b87d79c0d5388d Mon Sep 17 00:00:00 2001 From: Przemo Nowaczyk Date: Fri, 25 Oct 2019 00:39:25 +0200 Subject: [PATCH] add [homebrew] cask service (#4228) * add homebrew cask service * rename formula to cask --- services/homebrew/homebrew-cask.service.js | 48 ++++++++++++++++++++++ services/homebrew/homebrew-cask.tester.js | 24 +++++++++++ 2 files changed, 72 insertions(+) create mode 100644 services/homebrew/homebrew-cask.service.js create mode 100644 services/homebrew/homebrew-cask.tester.js diff --git a/services/homebrew/homebrew-cask.service.js b/services/homebrew/homebrew-cask.service.js new file mode 100644 index 0000000000..7fff101127 --- /dev/null +++ b/services/homebrew/homebrew-cask.service.js @@ -0,0 +1,48 @@ +'use strict' + +const Joi = require('@hapi/joi') +const { renderVersionBadge } = require('../version') +const { BaseJsonService } = require('..') + +const schema = Joi.object({ + version: Joi.string().required(), +}).required() + +module.exports = class HomebrewCask extends BaseJsonService { + static get category() { + return 'version' + } + + static get route() { + return { + base: 'homebrew/cask/v', + pattern: ':cask', + } + } + + static get examples() { + return [ + { + title: 'homebrew cask', + namedParams: { cask: 'iterm2' }, + staticPreview: renderVersionBadge({ version: 'v3.2.5' }), + }, + ] + } + + static get defaultBadgeData() { + return { label: 'homebrew cask' } + } + + async fetch({ cask }) { + return this._requestJson({ + schema, + url: `https://formulae.brew.sh/api/cask/${cask}.json`, + }) + } + + async handle({ cask }) { + const data = await this.fetch({ cask }) + return renderVersionBadge({ version: data.version }) + } +} diff --git a/services/homebrew/homebrew-cask.tester.js b/services/homebrew/homebrew-cask.tester.js new file mode 100644 index 0000000000..95deb03812 --- /dev/null +++ b/services/homebrew/homebrew-cask.tester.js @@ -0,0 +1,24 @@ +'use strict' + +const { isVPlusTripleDottedVersion } = require('../test-validators') +const t = (module.exports = require('../tester').createServiceTester()) + +t.create('homebrew cask (valid)') + .get('/iterm2.json') + .expectBadge({ + label: 'homebrew cask', + message: isVPlusTripleDottedVersion, + }) + +t.create('homebrew cask (valid)') + .get('/iterm2.json') + .intercept(nock => + nock('https://formulae.brew.sh') + .get('/api/cask/iterm2.json') + .reply(200, { version: '3.3.6' }) + ) + .expectBadge({ label: 'homebrew cask', message: 'v3.3.6' }) + +t.create('homebrew cask (not found)') + .get('/not-a-package.json') + .expectBadge({ label: 'homebrew cask', message: 'not found' })