Commit 5d11f09e3b3e70f83daee734f38a23bb8dd806e1
Add _any pseudo key for conditions
As its name suggests it matches any field.
Author: xaizek
Author date (UTC): 2018-10-31 22:13
Committer name: xaizek
Committer date (UTC): 2018-10-31 22:19
Parent(s): 2c70f5c0814e91e352eb282492a619995adc63e6
Signing key: 99DC5E4DB05F6BE2
Tree: 55c2cf0257a2fc83aca4f80272f5dbf6ffcabff3
File docs/04-commands.md changed (mode: 100644) (index f2d2d0a..3f1d532) |
... |
... |
key op value |
105 |
105 |
|
|
106 |
106 |
Extra spaces are allowed, but don't forget to escape them (with \\ or quotes). |
Extra spaces are allowed, but don't forget to escape them (with \\ or quotes). |
107 |
107 |
|
|
|
108 |
|
Key in a condition can be a pseudo value "\_any" which matches with any existing |
|
109 |
|
field of an item. |
|
110 |
|
|
108 |
111 |
Command composition |
Command composition |
109 |
112 |
------------------- |
------------------- |
110 |
113 |
|
|
File src/ItemFilter.cpp changed (mode: 100644) (index 56abf20..6692066) |
... |
... |
ItemFilter::~ItemFilter() |
53 |
53 |
bool |
bool |
54 |
54 |
ItemFilter::passes(Item &item) const |
ItemFilter::passes(Item &item) const |
55 |
55 |
{ |
{ |
56 |
|
return passes([&item](const std::string &f) { |
|
57 |
|
return std::vector<std::string>{ item.getValue(f) }; |
|
|
56 |
|
return passes([&item](const std::string &key) { |
|
57 |
|
std::vector<std::string> values; |
|
58 |
|
if (key == "_any") { |
|
59 |
|
for (const std::string &key : item.listRecordNames()) { |
|
60 |
|
values.push_back(item.getValue(key)); |
|
61 |
|
} |
|
62 |
|
} else { |
|
63 |
|
values.push_back(item.getValue(key)); |
|
64 |
|
} |
|
65 |
|
return values; |
58 |
66 |
}); |
}); |
59 |
67 |
} |
} |
60 |
68 |
|
|
File tests/ItemFilter.cpp changed (mode: 100644) (index 1c3b2f1..98d483f) |
... |
... |
TEST_CASE("Error messages add up", "[item-filter]") |
47 |
47 |
|
|
48 |
48 |
REQUIRE(split(error, '\n').size() == 4); |
REQUIRE(split(error, '\n').size() == 4); |
49 |
49 |
} |
} |
|
50 |
|
|
|
51 |
|
TEST_CASE("_any pseudo field", "[item-filter]") |
|
52 |
|
{ |
|
53 |
|
Item item = Tests::makeItem("id"); |
|
54 |
|
item.setValue("title", "title"); |
|
55 |
|
|
|
56 |
|
ItemFilter filter({ "_any==title" }); |
|
57 |
|
REQUIRE(filter.passes(item)); |
|
58 |
|
} |