[whiskers] Add check that template contain tags.

This commit is contained in:
Alexander Arlt
2021-01-20 15:26:34 -05:00
parent a75b87c80e
commit 061fecbc90
6 changed files with 38 additions and 22 deletions
+16
View File
@@ -40,6 +40,7 @@ Whiskers& Whiskers::operator()(string _parameter, string _value)
{
checkParameterValid(_parameter);
checkParameterUnknown(_parameter);
checkTemplateContainsTags(_parameter, {""});
m_parameters[move(_parameter)] = move(_value);
return *this;
}
@@ -48,6 +49,7 @@ Whiskers& Whiskers::operator()(string _parameter, bool _value)
{
checkParameterValid(_parameter);
checkParameterUnknown(_parameter);
checkTemplateContainsTags(_parameter, {"?", "/"});
m_conditions[move(_parameter)] = _value;
return *this;
}
@@ -59,6 +61,7 @@ Whiskers& Whiskers::operator()(
{
checkParameterValid(_listParameter);
checkParameterUnknown(_listParameter);
checkTemplateContainsTags(_listParameter, {"#", "/"});
for (auto const& element: _values)
for (auto const& val: element)
checkParameterValid(val.first);
@@ -100,6 +103,19 @@ void Whiskers::checkParameterUnknown(string const& _parameter) const
);
}
void Whiskers::checkTemplateContainsTags(string const& _parameter, vector<string> const& _prefixes) const
{
for (auto const& prefix: _prefixes)
{
string tag{"<" + prefix + _parameter + ">"};
assertThrow(
m_template.find(tag) != string::npos,
WhiskersError,
"Tag '" + tag + "' not found in template:\n" + m_template
);
}
}
namespace
{
template<class ReplaceCallback>