Skip to content

Commit 17e263b

Browse files
authored
Merge pull request #246 from metafacture/addStringConditionals
Add `str_contain()`/`str_equal()`/`str_match()` Fix conditionals.
2 parents 0ac3023 + 4050b85 commit 17e263b

File tree

3 files changed

+197
-0
lines changed

3 files changed

+197
-0
lines changed

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ public boolean test(final Metafix metafix, final Record record, final List<Strin
4141
return !any_contain.test(metafix, record, params, options);
4242
}
4343
},
44+
str_contain {
45+
@Override
46+
public boolean test(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
47+
return testConditional(params, CONTAINS);
48+
}
49+
},
4450

4551
all_equal {
4652
@Override
@@ -60,6 +66,12 @@ public boolean test(final Metafix metafix, final Record record, final List<Strin
6066
return !any_equal.test(metafix, record, params, options);
6167
}
6268
},
69+
str_equal {
70+
@Override
71+
public boolean test(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
72+
return testConditional(params, EQUALS);
73+
}
74+
},
6375

6476
exists {
6577
@Override
@@ -113,6 +125,12 @@ public boolean test(final Metafix metafix, final Record record, final List<Strin
113125
public boolean test(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
114126
return !any_match.test(metafix, record, params, options);
115127
}
128+
},
129+
str_match {
130+
@Override
131+
public boolean test(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
132+
return testConditional(params, MATCHES);
133+
}
116134
}
117135

118136
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,8 @@ default boolean testConditional(final Record record, final List<String> params,
4949
));
5050
}
5151

52+
default boolean testConditional(final List<String> params, final BiPredicate<String, String> conditional) {
53+
return conditional.test(params.get(0), params.get(1));
54+
}
55+
5256
}

metafix/src/test/java/org/metafacture/metafix/MetafixIfTest.java

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1430,4 +1430,179 @@ public void shouldContainHashInHash() {
14301430
);
14311431
}
14321432

1433+
@Test
1434+
public void shouldContainString() {
1435+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1436+
"if str_contain('name', 'a$[var]')",
1437+
" add_field('type', 'Organization')",
1438+
"end"
1439+
),
1440+
ImmutableMap.of("var", "me"),
1441+
i -> {
1442+
i.startRecord("1");
1443+
i.literal("name", "Mame");
1444+
i.literal("name", "A University");
1445+
i.endRecord();
1446+
1447+
i.startRecord("2");
1448+
i.literal("name", "Mame");
1449+
i.literal("name", "Max");
1450+
i.endRecord();
1451+
1452+
i.startRecord("3");
1453+
i.endRecord();
1454+
},
1455+
o -> {
1456+
o.get().startRecord("1");
1457+
o.get().literal("name", "Mame");
1458+
o.get().literal("name", "A University");
1459+
o.get().literal("type", "Organization");
1460+
o.get().endRecord();
1461+
1462+
o.get().startRecord("2");
1463+
o.get().literal("name", "Mame");
1464+
o.get().literal("name", "Max");
1465+
o.get().literal("type", "Organization");
1466+
o.get().endRecord();
1467+
1468+
o.get().startRecord("3");
1469+
o.get().literal("type", "Organization");
1470+
o.get().endRecord();
1471+
}
1472+
);
1473+
}
1474+
1475+
@Test
1476+
public void shouldEqualString() {
1477+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1478+
"if str_equal('name', 'na$[var]')",
1479+
" add_field('type', 'Organization')",
1480+
"end"
1481+
),
1482+
ImmutableMap.of("var", "me"),
1483+
i -> {
1484+
i.startRecord("1");
1485+
i.literal("name", "Mame");
1486+
i.literal("name", "A University");
1487+
i.endRecord();
1488+
1489+
i.startRecord("2");
1490+
i.literal("name", "Mame");
1491+
i.literal("name", "Max");
1492+
i.endRecord();
1493+
1494+
i.startRecord("3");
1495+
i.endRecord();
1496+
},
1497+
o -> {
1498+
o.get().startRecord("1");
1499+
o.get().literal("name", "Mame");
1500+
o.get().literal("name", "A University");
1501+
o.get().literal("type", "Organization");
1502+
o.get().endRecord();
1503+
1504+
o.get().startRecord("2");
1505+
o.get().literal("name", "Mame");
1506+
o.get().literal("name", "Max");
1507+
o.get().literal("type", "Organization");
1508+
o.get().endRecord();
1509+
1510+
o.get().startRecord("3");
1511+
o.get().literal("type", "Organization");
1512+
o.get().endRecord();
1513+
}
1514+
);
1515+
}
1516+
1517+
@Test
1518+
public void shouldMatchString() {
1519+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1520+
"if str_match('name', '.*a$[var]')",
1521+
" add_field('type', 'Organization')",
1522+
"end"
1523+
),
1524+
ImmutableMap.of("var", "me"),
1525+
i -> {
1526+
i.startRecord("1");
1527+
i.literal("name", "Mame");
1528+
i.literal("name", "A University");
1529+
i.endRecord();
1530+
1531+
i.startRecord("2");
1532+
i.literal("name", "Mame");
1533+
i.literal("name", "Max");
1534+
i.endRecord();
1535+
1536+
i.startRecord("3");
1537+
i.endRecord();
1538+
},
1539+
o -> {
1540+
o.get().startRecord("1");
1541+
o.get().literal("name", "Mame");
1542+
o.get().literal("name", "A University");
1543+
o.get().literal("type", "Organization");
1544+
o.get().endRecord();
1545+
1546+
o.get().startRecord("2");
1547+
o.get().literal("name", "Mame");
1548+
o.get().literal("name", "Max");
1549+
o.get().literal("type", "Organization");
1550+
o.get().endRecord();
1551+
1552+
o.get().startRecord("3");
1553+
o.get().literal("type", "Organization");
1554+
o.get().endRecord();
1555+
}
1556+
);
1557+
}
1558+
1559+
@Test
1560+
public void shouldTestMacroVariable() {
1561+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1562+
"do macro('test')",
1563+
" if str_contain('name', 'a$[var]')",
1564+
" add_field('type', 'Organization: $[var]')",
1565+
" end",
1566+
"end",
1567+
"macro('test', 'var': 'm')",
1568+
"macro('test', 'var': 'me')",
1569+
"macro('test', 'var': 'mee')"
1570+
),
1571+
i -> {
1572+
i.startRecord("1");
1573+
i.literal("name", "Mame");
1574+
i.literal("name", "A University");
1575+
i.endRecord();
1576+
1577+
i.startRecord("2");
1578+
i.literal("name", "Mame");
1579+
i.literal("name", "Max");
1580+
i.endRecord();
1581+
1582+
i.startRecord("3");
1583+
i.endRecord();
1584+
},
1585+
o -> {
1586+
o.get().startRecord("1");
1587+
o.get().literal("name", "Mame");
1588+
o.get().literal("name", "A University");
1589+
o.get().literal("type", "Organization: m");
1590+
o.get().literal("type", "Organization: me");
1591+
o.get().endRecord();
1592+
1593+
o.get().startRecord("2");
1594+
o.get().literal("name", "Mame");
1595+
o.get().literal("name", "Max");
1596+
o.get().literal("type", "Organization: m");
1597+
o.get().literal("type", "Organization: me");
1598+
o.get().endRecord();
1599+
1600+
o.get().startRecord("3");
1601+
o.get().literal("type", "Organization: m");
1602+
o.get().literal("type", "Organization: me");
1603+
o.get().endRecord();
1604+
}
1605+
);
1606+
}
1607+
14331608
}

0 commit comments

Comments
 (0)