Allow index in nested loops

This commit is contained in:
pantor
2018-03-19 11:09:23 +01:00
parent 776af96b0b
commit 1766793fd5
2 changed files with 8 additions and 0 deletions
+7
View File
@@ -544,6 +544,13 @@ public:
const std::vector<json> list = eval_expression<std::vector<json>>(element_loop->list, data);
for (unsigned int i = 0; i < list.size(); i++) {
json data_loop = data;
/* For nested loops, use parent/index */
if (data_loop.count ("index") == 1 && data_loop.count ("index") == 1) {
data_loop["parent"]["index"] = data_loop["index"];
data_loop["parent"]["index1"] = data_loop["index1"];
data_loop["parent"]["is_first"] = data_loop["is_first"];
data_loop["parent"]["is_last"] = data_loop["is_last"];
}
data_loop[element_loop->value] = list[i];
data_loop["index"] = i;
data_loop["index1"] = i + 1;
+1
View File
@@ -59,6 +59,7 @@ TEST_CASE("types") {
data["empty_loop"] = {};
CHECK( env.render("{% for name in empty_loop %}a{% endfor %}", data) == "" );
CHECK( env.render("{% for name in {} %}a{% endfor %}", data) == "" );
CHECK_THROWS_WITH( env.render("{% for name ins names %}a{% endfor %}", data), "[inja.exception.parser_error] unknown loop statement: for name ins names" );
// CHECK_THROWS_WITH( env.render("{% for name in relatives %}{{ name }}{% endfor %}", data), "[inja.exception.json_error] [json.exception.type_error.302] type must be array, but is object" );