Skip to content

Commit

Permalink
add multipleOf rule to number type
Browse files Browse the repository at this point in the history
  • Loading branch information
ziyuan-linn committed Feb 24, 2024
1 parent b647260 commit c136edb
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 1 deletion.
1 change: 1 addition & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ The `moldObject` consists of key-value pairs. The key defines the name of an all
- `min` (optional): A number defining the minimum value.
- `max` (optional): A number defining the maximum value.
- `integer` (optional): A boolean defining whether the value should be an integer. Defaults to `false`.
- `multipleOf` (optional): A number. When defined, the user value must be a multiple of this number.
- Specifically for `type: "enum"`:
- `enums` (required): An array defining a list of valid values.
- `caseInsensitive` (optional): A boolean defining whether to checks the user value against the enum list case-insensitively. Defaults to `true`.
Expand Down
16 changes: 15 additions & 1 deletion src/utils/handleOptions.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ const errorMessages = {
numberRange: (modelName, keyName, userValue, min, max, defaultValue) =>
`🟪ml5.js warns: The '${keyName}' option for ${modelName} has to be set to a number between ${min} and ${max}, but it is being set to '${userValue}' instead.\n\nml5.js is using default value of '${defaultValue}'.`,
numberInteger: (modelName, keyName, userValue, defaultValue) =>
`🟪ml5.js warns: The '${keyName}' option for ${modelName} has to be set to an integer, but it is being set to the float value '${userValue}' instead.\n\nml5.js is using the default value of ${defaultValue}.`,
`🟪ml5.js warns: The '${keyName}' option for ${modelName} has to be set to an integer, but it is being set to the float value '${userValue}' instead.\n\nml5.js is using the default value of '${defaultValue}'.`,
numberMultipleOf: (modelName, keyName, userValue, multipleOf, defaultValue) =>
`🟪ml5.js warns: The '${keyName}' option for ${modelName} has to be a multiple of ${multipleOf}, but it is being set to '${userValue}' instead.\n\nml5.js is using the default value of '${defaultValue}'.`,
};

/**
Expand Down Expand Up @@ -135,13 +137,25 @@ function handleOptions(userObject, moldObject, modelName) {
const min = evaluate(filteredObject, rules.min) ?? -Infinity;
const max = evaluate(filteredObject, rules.max) ?? Infinity;
const integer = evaluate(filteredObject, rules.integer) ?? false;
const multipleOf = evaluate(filteredObject, rules.multipleOf);
const checkedValue = isInRange(userValue, min, max);

if (integer && !Number.isInteger(userValue)) {
console.warn(
errorMessages.numberInteger(modelName, key, userValue, defaultValue)
);
filteredObject[key] = defaultValue;
} else if (multipleOf !== undefined && userValue % multipleOf !== 0) {
console.warn(
errorMessages.numberMultipleOf(
modelName,
key,
userValue,
multipleOf,
defaultValue
)
);
filteredObject[key] = defaultValue;
} else if (checkedValue === undefined) {
console.warn(
errorMessages.numberRange(
Expand Down

0 comments on commit c136edb

Please sign in to comment.