Test Spectral values for past tense.
npm install spectral-function-past-tenseA custom function for Spectral to check that the input contains a verb in the
past tense. This can be useful for checking the message names in an AsyncAPI document.
```
npm install spectral-function-past-tense
or
``
yarn add spectral-function-past-tense
This custom function will attempt to parse a string of any case(snake_case, kebab-case, camelCase, etc.) and ensure it
contains a past tense verb.
_Note: Check out the example directory
for a complete demonstration._
A Spectral ruleset can contain custom functions. By default, with the declarative syntax, these will be in a functions
directory. At this time, there isn't a way to include functions from outside packages other than to wrap them in your
own function or to use the JavaScript version of a Spectral ruleset.
To wrap the spectral-function-past-tense custom function, create a simple Node.js module in your functions directorypast.js
named with the following contents:
`js`
import past from "spectral-function-past-tense";
export default past;
Then use the following for your Spectral YAML ruleset:
`yaml`
functions: [past]
formats: [asyncapi2]
rules:
rule:
given: "$.channels.*.[publish,subscribe].message.name"
then:
function: past
The JavaScript version may look like this:
`js
import past from "spectral-function-past-tense";
export default {
rules: {
rule: {
given: "$.channels.*.[publish,subscribe].message.name",
then: {
function: past,
},
},
},
};
`
If the input doesn't contain a past-tense word, a validation result will be produced. Example:
`
ā spectral lint --ruleset=./example/ruleset.yaml ./example/streetlights.yaml
./example/streetlights.yaml
96:13 warning rule Value "dimLight" must be past tense. components.messages.dimLight.name
ā 1 problem (0 errors, 1 warning, 0 infos, 0 hints)
`
This custom function allows for optional overrides. It can either match on the entire string (e.g., LightShiningLightShining
string will match override exactly) or it will match on individual words (e.g., LightShining stringShining
will match override).
In practice, with a declarative ruleset, the overrides option will look like this:
```
functions: [past]
formats: [asyncapi2]
rules:
rule:
given: "$.channels.*.[publish,subscribe].message.name"
then:
function: past
functionOptions:
overrides:
- Shining
MIT