Skip to content

Commit d07d9d5

Browse files
committed
Add less_than()/greater_than() Fix functions. (#650)
1 parent 16c5f0e commit d07d9d5

File tree

3 files changed

+428
-10
lines changed

3 files changed

+428
-10
lines changed

metafix/src/main/java/org/metafacture/metafix/FixConditional.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,19 @@ public boolean test(final Metafix metafix, final Record record, final List<Strin
182182
public boolean test(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
183183
return testConditional(params, MATCHES);
184184
}
185+
},
186+
187+
greater_than {
188+
@Override
189+
public boolean test(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
190+
return testConditional(record, params, ALL, GREATER_THAN);
191+
}
192+
},
193+
less_than {
194+
@Override
195+
public boolean test(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
196+
return testConditional(record, params, ALL, LESS_THAN);
197+
}
185198
}
186199

187200
}

metafix/src/main/java/org/metafacture/metafix/api/FixPredicate.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,10 @@ public interface FixPredicate {
4040
Predicate<String> IS_TRUE = s -> "true".equals(s) || "1".equals(s);
4141
Predicate<String> IS_FALSE = s -> "false".equals(s) || "0".equals(s);
4242

43-
Predicate<String> IS_NUMBER = s -> {
44-
try {
45-
new BigDecimal(s);
46-
return true;
47-
}
48-
catch (final NumberFormatException e) {
49-
return false;
50-
}
51-
};
43+
Predicate<String> IS_NUMBER = s -> testNumberConditional(s, x -> true);
44+
45+
BiPredicate<String, String> GREATER_THAN = (s, t) -> testNumberConditional(s, x -> testNumberConditional(t, y -> x.compareTo(y) > 0));
46+
BiPredicate<String, String> LESS_THAN = (s, t) -> testNumberConditional(s, x -> testNumberConditional(t, y -> x.compareTo(y) < 0));
5247

5348
Predicate<Value> IS_EMPTY = v -> v.extractType((m, c) -> m
5449
.ifArray(a -> c.accept(a.isEmpty()))
@@ -88,4 +83,14 @@ default boolean testStringConditional(final Record record, final List<String> pa
8883
));
8984
}
9085

86+
static boolean testNumberConditional(final String string, final Predicate<BigDecimal> conditional) {
87+
try {
88+
final BigDecimal number = new BigDecimal(string);
89+
return number != null && conditional.test(number);
90+
}
91+
catch (final NumberFormatException e) {
92+
return false;
93+
}
94+
}
95+
9196
}

0 commit comments

Comments
 (0)