Skip to content

Commit

Permalink
feat(dynamite_runtime): add support for number validators
Browse files Browse the repository at this point in the history
Signed-off-by: Nikolas Rimikis <leptopoda@users.noreply.github.com>
  • Loading branch information
Leptopoda committed Apr 27, 2024
1 parent 6e8ec22 commit 90f5924
Show file tree
Hide file tree
Showing 9 changed files with 603 additions and 5 deletions.
25 changes: 25 additions & 0 deletions packages/dynamite/dynamite/lib/src/helpers/pattern_check.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,29 @@ Iterable<Expression> buildPatternCheck(
});
}
}

if (schema is NumberValidator) {
final multipleOf = schema.multipleOf;
final maximum = schema.maximum;
final exclusiveMaximum = schema.exclusiveMaximum;
final minimum = schema.minimum;
final exclusiveMinimum = schema.exclusiveMinimum;

if (multipleOf != null ||
maximum != null ||
exclusiveMaximum != null ||
minimum != null ||
exclusiveMinimum != null) {
yield refer('checkNumber', 'package:dynamite_runtime/utils.dart').call([
valueReference,
valueName,
], {
if (multipleOf != null) 'multipleOf': literalNum(multipleOf),
if (maximum != null) 'maximum': literalNum(maximum),
if (exclusiveMaximum != null) 'exclusiveMaximum': literalNum(exclusiveMaximum),
if (minimum != null) 'minimum': literalNum(minimum),
if (exclusiveMinimum != null) 'exclusiveMinimum': literalNum(exclusiveMinimum),
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,13 @@ abstract interface class $TestObjectInterface {
BuiltList<int>? get arrayUnique;
@BuiltValueField(wireName: 'array-multiple-checks')
BuiltList<int>? get arrayMultipleChecks;
num? get multipleOf;
num? get maximum;
num? get exclusiveMaximum;
num? get minimum;
num? get exclusiveMinimum;
@BuiltValueField(wireName: 'number-multiple-checks')
num? get numberMultipleChecks;
@BuiltValueHook(initializeBuilder: true)
static void _defaults($TestObjectInterfaceBuilder b) {}
@BuiltValueHook(finalizeBuilder: true)
Expand Down Expand Up @@ -86,6 +93,40 @@ abstract interface class $TestObjectInterface {
minItems: 3,
maxItems: 20,
);
_i1.checkNumber(
b.multipleOf,
'multipleOf',
multipleOf: 0,
);
_i1.checkNumber(
b.maximum,
'maximum',
maximum: 0,
);
_i1.checkNumber(
b.exclusiveMaximum,
'exclusiveMaximum',
exclusiveMaximum: 0,
);
_i1.checkNumber(
b.minimum,
'minimum',
minimum: 0,
);
_i1.checkNumber(
b.exclusiveMinimum,
'exclusiveMinimum',
exclusiveMinimum: 0,
);
_i1.checkNumber(
b.numberMultipleChecks,
'numberMultipleChecks',
multipleOf: 1,
maximum: 0,
exclusiveMaximum: 0.1,
minimum: 0,
exclusiveMinimum: -0.1,
);
}
}

Expand Down Expand Up @@ -139,6 +180,15 @@ abstract interface class $TestObjectUnspecifiedInterface {
minItems: 3,
maxItems: 20,
);
_i1.checkNumber(
b.value,
'value',
multipleOf: 1,
maximum: 0,
exclusiveMaximum: 0,
minimum: 0,
exclusiveMinimum: 0,
);
}
}

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,34 @@
"items": {
"type": "integer"
}
},
"multipleOf": {
"type": "number",
"multipleOf": 0
},
"maximum": {
"type": "number",
"maximum": 0
},
"exclusiveMaximum": {
"type": "number",
"exclusiveMaximum": 0
},
"minimum": {
"type": "number",
"minimum": 0
},
"exclusiveMinimum": {
"type": "number",
"exclusiveMinimum": 0
},
"number-multiple-checks": {
"type": "number",
"multipleOf": 1,
"maximum": 0,
"exclusiveMaximum": 0.1,
"minimum": 0,
"exclusiveMinimum": -0.1
}
}
},
Expand All @@ -68,7 +96,12 @@
"pattern": "^[0-9]*$",
"minLength": 3,
"maxLength": 20,
"unique": true
"unique": true,
"multipleOf": 1,
"maximum": 0,
"exclusiveMaximum": 0,
"minimum": 0,
"exclusiveMinimum": 0
}
}
}
Expand Down

0 comments on commit 90f5924

Please sign in to comment.