Skip to content

Commit b6a52c9

Browse files
committed
feature: implement getExceptionsByKey
1 parent 5716ae2 commit b6a52c9

31 files changed

+511
-138
lines changed

lib/src/lucid_validator.dart

+26
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,32 @@ abstract class LucidValidator<E> {
107107
exceptions: exceptions,
108108
);
109109
}
110+
111+
List<ValidationException> getExceptions(E entity) {
112+
final List<ValidationException> exceptions = [];
113+
114+
for (var builder in _builders) {
115+
exceptions.addAll(builder.executeRules(entity));
116+
if(builder.getMode() == CascadeMode.stopOnFirstFailure && exceptions.isNotEmpty) {
117+
break;
118+
}
119+
}
120+
121+
return exceptions;
122+
}
123+
124+
List<ValidationException> getExceptionsByKey(E entity, String key) {
125+
final List<ValidationException> exceptions = [];
126+
127+
for (var builder in _builders) {
128+
exceptions.addAll(builder.executeRules(entity));
129+
if(builder.getMode() == CascadeMode.stopOnFirstFailure && exceptions.isNotEmpty) {
130+
break;
131+
}
132+
}
133+
134+
return exceptions.where((exception) => exception.key == key).toList();
135+
}
110136
}
111137

112138
class _LucidValidationBuilder<TProp, Entity>

lib/src/validations/equal_validation.dart

+5-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,11 @@ extension EqualValidation<T, E> on LucidValidationBuilder<T, E> {
4545
defaultMessage: message,
4646
);
4747

48-
return ValidationException(message: currentMessage, code: currentCode);
48+
return ValidationException(
49+
message: currentMessage,
50+
code: currentCode,
51+
key: key,
52+
);
4953
},
5054
);
5155
}

lib/src/validations/exclusive_between_datetime_validation.dart

+23-7
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,17 @@ extension ExclusiveBetweenDatetimeValidation
4747
defaultMessage: message,
4848
);
4949

50-
return ValidationException(message: currentMessage, code: currentCode);
50+
return ValidationException(
51+
message: currentMessage,
52+
code: currentCode,
53+
key: key,
54+
);
5155
});
5256
}
5357
}
5458

5559
extension ExclusiveBetweenDatetimeNullableValidation
56-
on SimpleValidationBuilder<DateTime?> {
60+
on SimpleValidationBuilder<DateTime?> {
5761
/// Adds a validation rule that checks if the [DateTime?] is greater than [comparison].
5862
///
5963
/// [start] is the date and time value must be greater than.
@@ -82,7 +86,9 @@ on SimpleValidationBuilder<DateTime?> {
8286
String? code,
8387
}) {
8488
return use((value, entity) {
85-
if (value != null && (value.isAfter(start) && value.isBefore(end))) return null;
89+
if (value != null && (value.isAfter(start) && value.isBefore(end))) {
90+
return null;
91+
}
8692

8793
final currentCode = code ?? Language.code.exclusiveBetweenDatetime;
8894
final currentMessage = LucidValidation.global.languageManager.translate(
@@ -95,13 +101,17 @@ on SimpleValidationBuilder<DateTime?> {
95101
defaultMessage: message,
96102
);
97103

98-
return ValidationException(message: currentMessage, code: currentCode);
104+
return ValidationException(
105+
message: currentMessage,
106+
code: currentCode,
107+
key: key,
108+
);
99109
});
100110
}
101111
}
102112

103113
extension ExclusiveBetweenDatetimeOrNullableValidation
104-
on SimpleValidationBuilder<DateTime?> {
114+
on SimpleValidationBuilder<DateTime?> {
105115
/// Adds a validation rule that checks if the [DateTime?] is greater than [comparison] or [null].
106116
///
107117
/// [start] is the date and time value must be greater than.
@@ -130,7 +140,9 @@ on SimpleValidationBuilder<DateTime?> {
130140
String? code,
131141
}) {
132142
return use((value, entity) {
133-
if (value == null || (value.isAfter(start) && value.isBefore(end))) return null;
143+
if (value == null || (value.isAfter(start) && value.isBefore(end))) {
144+
return null;
145+
}
134146

135147
final currentCode = code ?? Language.code.exclusiveBetweenDatetime;
136148
final currentMessage = LucidValidation.global.languageManager.translate(
@@ -143,7 +155,11 @@ on SimpleValidationBuilder<DateTime?> {
143155
defaultMessage: message,
144156
);
145157

146-
return ValidationException(message: currentMessage, code: currentCode);
158+
return ValidationException(
159+
message: currentMessage,
160+
code: currentCode,
161+
key: key,
162+
);
147163
});
148164
}
149165
}

lib/src/validations/greater_than_datetime_validation.dart

+22-12
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ extension GreaterThanDateTimeValidation on SimpleValidationBuilder<DateTime> {
4747
}
4848
}
4949

50-
extension GreaterThanDateTimeNullableValidation on SimpleValidationBuilder<DateTime?> {
50+
extension GreaterThanDateTimeNullableValidation
51+
on SimpleValidationBuilder<DateTime?> {
5152
/// Adds a validation rule that checks if the [DateTime?] is greater than [comparison].
5253
///
5354
/// [comparison] is the date and time value must be greater than.
@@ -68,10 +69,10 @@ extension GreaterThanDateTimeNullableValidation on SimpleValidationBuilder<DateT
6869
/// - **{ComparisonValue}**: The value to compare against.
6970
///
7071
SimpleValidationBuilder<DateTime?> greaterThan(
71-
DateTime comparison, {
72-
String? message,
73-
String? code,
74-
}) {
72+
DateTime comparison, {
73+
String? message,
74+
String? code,
75+
}) {
7576
return use((value, entity) {
7677
if (value != null && value.isAfter(comparison)) return null;
7778

@@ -85,12 +86,17 @@ extension GreaterThanDateTimeNullableValidation on SimpleValidationBuilder<DateT
8586
defaultMessage: message,
8687
);
8788

88-
return ValidationException(message: currentMessage, code: currentCode);
89+
return ValidationException(
90+
message: currentMessage,
91+
code: currentCode,
92+
key: key,
93+
);
8994
});
9095
}
9196
}
9297

93-
extension GreaterThanDateTimeOrNullableValidation on SimpleValidationBuilder<DateTime?> {
98+
extension GreaterThanDateTimeOrNullableValidation
99+
on SimpleValidationBuilder<DateTime?> {
94100
/// Adds a validation rule that checks if the [DateTime?] is greater than [comparison] or [null].
95101
///
96102
/// [comparison] is the date and time value must be greater than.
@@ -111,10 +117,10 @@ extension GreaterThanDateTimeOrNullableValidation on SimpleValidationBuilder<Dat
111117
/// - **{ComparisonValue}**: The value to compare against.
112118
///
113119
SimpleValidationBuilder<DateTime?> greaterThanOrNull(
114-
DateTime comparison, {
115-
String? message,
116-
String? code,
117-
}) {
120+
DateTime comparison, {
121+
String? message,
122+
String? code,
123+
}) {
118124
return use((value, entity) {
119125
if (value == null || value.isAfter(comparison)) return null;
120126

@@ -128,7 +134,11 @@ extension GreaterThanDateTimeOrNullableValidation on SimpleValidationBuilder<Dat
128134
defaultMessage: message,
129135
);
130136

131-
return ValidationException(message: currentMessage, code: currentCode);
137+
return ValidationException(
138+
message: currentMessage,
139+
code: currentCode,
140+
key: key,
141+
);
132142
});
133143
}
134144
}

lib/src/validations/greater_than_or_equal_to_datetime_validation.dart

+29-15
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,17 @@ extension GreaterThanOrEqualToDateTimeValidation
4545
defaultMessage: message,
4646
);
4747

48-
return ValidationException(message: currentMessage, code: currentCode);
48+
return ValidationException(
49+
message: currentMessage,
50+
code: currentCode,
51+
key: key,
52+
);
4953
});
5054
}
5155
}
5256

5357
extension GreaterThanOrEqualToDateTimeNullableValidation
54-
on SimpleValidationBuilder<DateTime?> {
58+
on SimpleValidationBuilder<DateTime?> {
5559
/// Adds a validation rule that checks if the [DateTime?] is greater than [comparison].
5660
///
5761
/// [comparison] is the date and time value must be greater than or equal.
@@ -72,12 +76,13 @@ on SimpleValidationBuilder<DateTime?> {
7276
/// - **{ComparisonValue}**: The value to compare against.
7377
///
7478
SimpleValidationBuilder<DateTime?> greaterThanOrEqualTo(
75-
DateTime comparison, {
76-
String? message,
77-
String? code,
78-
}) {
79+
DateTime comparison, {
80+
String? message,
81+
String? code,
82+
}) {
7983
return use((value, entity) {
80-
if (value != null && (value.isAfter(comparison) || value.isAtSameMomentAs(comparison))) {
84+
if (value != null &&
85+
(value.isAfter(comparison) || value.isAtSameMomentAs(comparison))) {
8186
return null;
8287
}
8388

@@ -91,13 +96,17 @@ on SimpleValidationBuilder<DateTime?> {
9196
defaultMessage: message,
9297
);
9398

94-
return ValidationException(message: currentMessage, code: currentCode);
99+
return ValidationException(
100+
message: currentMessage,
101+
code: currentCode,
102+
key: key,
103+
);
95104
});
96105
}
97106
}
98107

99108
extension GreaterThanOrEqualToDateTimeOrNullableValidation
100-
on SimpleValidationBuilder<DateTime?> {
109+
on SimpleValidationBuilder<DateTime?> {
101110
/// Adds a validation rule that checks if the [DateTime?] is greater than [comparison] or [null].
102111
///
103112
/// [comparison] is the date and time value must be greater than or equal.
@@ -118,12 +127,13 @@ on SimpleValidationBuilder<DateTime?> {
118127
/// - **{ComparisonValue}**: The value to compare against.
119128
///
120129
SimpleValidationBuilder<DateTime?> greaterThanOrEqualToOrNull(
121-
DateTime comparison, {
122-
String? message,
123-
String? code,
124-
}) {
130+
DateTime comparison, {
131+
String? message,
132+
String? code,
133+
}) {
125134
return use((value, entity) {
126-
if (value == null || (value.isAfter(comparison) || value.isAtSameMomentAs(comparison))) {
135+
if (value == null ||
136+
(value.isAfter(comparison) || value.isAtSameMomentAs(comparison))) {
127137
return null;
128138
}
129139

@@ -137,7 +147,11 @@ on SimpleValidationBuilder<DateTime?> {
137147
defaultMessage: message,
138148
);
139149

140-
return ValidationException(message: currentMessage, code: currentCode);
150+
return ValidationException(
151+
message: currentMessage,
152+
code: currentCode,
153+
key: key,
154+
);
141155
});
142156
}
143157
}

lib/src/validations/greater_than_validation.dart

+23-11
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,11 @@ extension GreaterThanValidation on SimpleValidationBuilder<num> {
4242
defaultMessage: message,
4343
);
4444

45-
return ValidationException(message: currentMessage, code: currentCode);
45+
return ValidationException(
46+
message: currentMessage,
47+
code: currentCode,
48+
key: key,
49+
);
4650
});
4751
}
4852
}
@@ -68,10 +72,10 @@ extension GreaterThanNullablealidation on SimpleValidationBuilder<num?> {
6872
/// - **{ComparisonValue}**: The value to compare against.
6973
///
7074
SimpleValidationBuilder<num?> greaterThan(
71-
num minValue, {
72-
String? message,
73-
String? code,
74-
}) {
75+
num minValue, {
76+
String? message,
77+
String? code,
78+
}) {
7579
return use((value, entity) {
7680
if (value != null && value > minValue) return null;
7781

@@ -85,7 +89,11 @@ extension GreaterThanNullablealidation on SimpleValidationBuilder<num?> {
8589
defaultMessage: message,
8690
);
8791

88-
return ValidationException(message: currentMessage, code: currentCode);
92+
return ValidationException(
93+
message: currentMessage,
94+
code: currentCode,
95+
key: key,
96+
);
8997
});
9098
}
9199
}
@@ -111,10 +119,10 @@ extension GreaterThanOrNullableValidation on SimpleValidationBuilder<num?> {
111119
/// - **{ComparisonValue}**: The value to compare against.
112120
///
113121
SimpleValidationBuilder<num?> greaterThanOrNull(
114-
num minValue, {
115-
String? message,
116-
String? code,
117-
}) {
122+
num minValue, {
123+
String? message,
124+
String? code,
125+
}) {
118126
return use((value, entity) {
119127
if (value == null || value > minValue) return null;
120128

@@ -128,7 +136,11 @@ extension GreaterThanOrNullableValidation on SimpleValidationBuilder<num?> {
128136
defaultMessage: message,
129137
);
130138

131-
return ValidationException(message: currentMessage, code: currentCode);
139+
return ValidationException(
140+
message: currentMessage,
141+
code: currentCode,
142+
key: key,
143+
);
132144
});
133145
}
134146
}

0 commit comments

Comments
 (0)