From 3d972509458a5b8f7910c0b74556d3254c19ac1b Mon Sep 17 00:00:00 2001 From: Mario Nebl Date: Sat, 18 Nov 2017 10:56:37 +0100 Subject: [PATCH] feat(core): expose fine-grained API for subject-case --- @commitlint/core/src/rules/subject-case.js | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/@commitlint/core/src/rules/subject-case.js b/@commitlint/core/src/rules/subject-case.js index 09544708cf..84177a4c7a 100644 --- a/@commitlint/core/src/rules/subject-case.js +++ b/@commitlint/core/src/rules/subject-case.js @@ -1,18 +1,32 @@ import ensureCase from '../library/ensure-case'; import message from '../library/message'; +const negated = when => when === 'never'; + export default (parsed, when, value) => { const {subject} = parsed; - if (!subject) { + if (typeof subject !== 'string') { return [true]; } - const negated = when === 'never'; + const checks = (Array.isArray(value) ? value : [value]).map(check => { + if (typeof check === 'string') { + return { + when: 'always', + case: check + }; + } + return check; + }); + + const result = checks.every(check => { + const r = ensureCase(subject, check.case); + return negated(check.when) ? !r : r; + }); - const result = ensureCase(subject, value); return [ - negated ? !result : result, + negated(when) ? !result : result, message([`subject must`, negated ? `not` : null, `be ${value}`]) ]; };