From 9d1ab6129c1cea46930b278aa15a0526458ccc09 Mon Sep 17 00:00:00 2001 From: G1Joshi Date: Sun, 1 May 2022 10:11:34 +0530 Subject: [PATCH 1/3] add PUB points badge --- services/pub/pub-points.service.js | 58 ++++++++++++++++++++++++++++++ services/pub/pub-points.tester.js | 24 +++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 services/pub/pub-points.service.js create mode 100644 services/pub/pub-points.tester.js diff --git a/services/pub/pub-points.service.js b/services/pub/pub-points.service.js new file mode 100644 index 0000000000000..5c0be0cded8ac --- /dev/null +++ b/services/pub/pub-points.service.js @@ -0,0 +1,58 @@ +import Joi from 'joi' +import { BaseJsonService } from '../index.js' + +const documentation = `

A measure of quality. This includes several dimensions of quality such as code style, platform support, and maintainability.

` + +const keywords = ['dart', 'flutter'] + +const schema = Joi.object({ + grantedPoints: Joi.number().min(0).max(130).required(), + maxPoints: Joi.number().min(130).max(130).required(), +}).required() + +const title = 'Pub Points' + +export default class PubPoints extends BaseJsonService { + static category = 'rating' + + static route = { base: 'pub/points', pattern: ':packageName' } + + static examples = [ + { + title, + keywords, + documentation, + namedParams: { packageName: 'analysis_options' }, + staticPreview: { + label: 'points', + message: '130/130', + color: 'brightgreen', + }, + }, + ] + + static defaultBadgeData = { label: 'points' } + + static render({ grantedPoints, maxPoints, packageName }) { + return { + label: 'points', + message: `${grantedPoints}/${maxPoints}`, + color: 'brightgreen', + link: `https://pub.dev/packages/${packageName}`, + } + } + + async fetch({ packageName }) { + return this._requestJson({ + schema, + url: `https://pub.dev/api/packages/${packageName}/score`, + }) + } + + async handle({ packageName }) { + const score = await this.fetch({ packageName }) + const grantedPoints = score.grantedPoints + const maxPoints = score.maxPoints + return this.constructor.render({ grantedPoints, maxPoints, packageName }) + } +} diff --git a/services/pub/pub-points.tester.js b/services/pub/pub-points.tester.js new file mode 100644 index 0000000000000..fe5f4fd5b524b --- /dev/null +++ b/services/pub/pub-points.tester.js @@ -0,0 +1,24 @@ +import Joi from 'joi' +import { createServiceTester } from '../tester.js' + +export const t = await createServiceTester() + +t.create('pub points (valid)') + .get('/analysis_options.json') + .expectBadge({ + label: 'points', + message: Joi.string().regex(/^\d+\/130$/), + color: 'brightgreen', + }) + +t.create('pub points (not found)').get('/analysisoptions.json').expectBadge({ + label: 'points', + message: 'not found', + color: 'red', +}) + +t.create('pub points (invalid)').get('/analysis-options.json').expectBadge({ + label: 'points', + message: 'invalid', + color: 'lightgrey', +}) From aea4f45fd1f74ebe3e340ea75838283568ad03ef Mon Sep 17 00:00:00 2001 From: G1Joshi Date: Wed, 4 May 2022 22:49:13 +0530 Subject: [PATCH 2/3] update PUB points badge --- services/pub/pub-points.service.js | 13 ++++--------- services/pub/pub-points.tester.js | 2 +- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/services/pub/pub-points.service.js b/services/pub/pub-points.service.js index 5c0be0cded8ac..6abdefe68b48d 100644 --- a/services/pub/pub-points.service.js +++ b/services/pub/pub-points.service.js @@ -23,22 +23,17 @@ export default class PubPoints extends BaseJsonService { keywords, documentation, namedParams: { packageName: 'analysis_options' }, - staticPreview: { - label: 'points', - message: '130/130', - color: 'brightgreen', - }, + staticPreview: this.render({ grantedPoints: 120, maxPoints: 130 }), }, ] static defaultBadgeData = { label: 'points' } - static render({ grantedPoints, maxPoints, packageName }) { + static render({ grantedPoints, maxPoints }) { return { label: 'points', message: `${grantedPoints}/${maxPoints}`, - color: 'brightgreen', - link: `https://pub.dev/packages/${packageName}`, + color: 'blue', } } @@ -53,6 +48,6 @@ export default class PubPoints extends BaseJsonService { const score = await this.fetch({ packageName }) const grantedPoints = score.grantedPoints const maxPoints = score.maxPoints - return this.constructor.render({ grantedPoints, maxPoints, packageName }) + return this.constructor.render({ grantedPoints, maxPoints }) } } diff --git a/services/pub/pub-points.tester.js b/services/pub/pub-points.tester.js index fe5f4fd5b524b..46c2d34da8c76 100644 --- a/services/pub/pub-points.tester.js +++ b/services/pub/pub-points.tester.js @@ -8,7 +8,7 @@ t.create('pub points (valid)') .expectBadge({ label: 'points', message: Joi.string().regex(/^\d+\/130$/), - color: 'brightgreen', + color: 'blue', }) t.create('pub points (not found)').get('/analysisoptions.json').expectBadge({ From 749aee4b59d537d91821e5932f13ede7f3f0991e Mon Sep 17 00:00:00 2001 From: G1Joshi Date: Sat, 7 May 2022 08:50:09 +0530 Subject: [PATCH 3/3] update PUB points badge --- services/pub/pub-points.service.js | 8 +++++--- services/pub/pub-points.tester.js | 1 - 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/services/pub/pub-points.service.js b/services/pub/pub-points.service.js index 6abdefe68b48d..0511e9149c2ab 100644 --- a/services/pub/pub-points.service.js +++ b/services/pub/pub-points.service.js @@ -1,13 +1,15 @@ import Joi from 'joi' +import { floorCount } from '../color-formatters.js' import { BaseJsonService } from '../index.js' +import { nonNegativeInteger } from '../validators.js' const documentation = `

A measure of quality. This includes several dimensions of quality such as code style, platform support, and maintainability.

` const keywords = ['dart', 'flutter'] const schema = Joi.object({ - grantedPoints: Joi.number().min(0).max(130).required(), - maxPoints: Joi.number().min(130).max(130).required(), + grantedPoints: nonNegativeInteger, + maxPoints: nonNegativeInteger, }).required() const title = 'Pub Points' @@ -33,7 +35,7 @@ export default class PubPoints extends BaseJsonService { return { label: 'points', message: `${grantedPoints}/${maxPoints}`, - color: 'blue', + color: floorCount((grantedPoints / maxPoints) * 100, 40, 60, 80), } } diff --git a/services/pub/pub-points.tester.js b/services/pub/pub-points.tester.js index 46c2d34da8c76..55a8b238de747 100644 --- a/services/pub/pub-points.tester.js +++ b/services/pub/pub-points.tester.js @@ -8,7 +8,6 @@ t.create('pub points (valid)') .expectBadge({ label: 'points', message: Joi.string().regex(/^\d+\/130$/), - color: 'blue', }) t.create('pub points (not found)').get('/analysisoptions.json').expectBadge({