mirror of
https://github.com/pantor/inja.git
synced 2026-04-04 15:18:53 +00:00
at function for objects
This commit is contained in:
@@ -245,6 +245,9 @@ render("{{ float(\"1.8\") > 2 }}", data); // false
|
||||
render("Hello {{ default(neighbour, \"my friend\") }}!", data); // "Hello Peter!"
|
||||
render("Hello {{ default(colleague, \"my friend\") }}!", data); // "Hello my friend!"
|
||||
|
||||
// Access an objects value dynamically
|
||||
render("{{ at(time, \"start\") }} to {{ time.end }}", data); // "16 to 22"
|
||||
|
||||
// Check if a key exists in an object
|
||||
render("{{ exists(\"guests\") }}", data); // "true"
|
||||
render("{{ exists(\"city\") }}", data); // "false"
|
||||
|
||||
@@ -343,7 +343,11 @@ class Renderer : public NodeVisitor {
|
||||
} break;
|
||||
case Op::At: {
|
||||
const auto args = get_arguments<2>(node);
|
||||
json_eval_stack.push(&args[0]->at(args[1]->get<int>()));
|
||||
if (args[0]->is_object()) {
|
||||
json_eval_stack.push(&args[0]->at(args[1]->get<std::string>()));
|
||||
} else {
|
||||
json_eval_stack.push(&args[0]->at(args[1]->get<int>()));
|
||||
}
|
||||
} break;
|
||||
case Op::Default: {
|
||||
const auto test_arg = get_arguments<1, 0, false>(node)[0];
|
||||
|
||||
@@ -70,6 +70,8 @@ TEST_CASE("functions") {
|
||||
SUBCASE("at") {
|
||||
CHECK(env.render("{{ at(names, 0) }}", data) == "Jeff");
|
||||
CHECK(env.render("{{ at(names, i) }}", data) == "Seb");
|
||||
CHECK(env.render("{{ at(brother, \"name\") }}", data) == "Chris");
|
||||
CHECK(env.render("{{ at(at(brother, \"daughters\"), 0) }}", data) == "Maria");
|
||||
// CHECK(env.render("{{ at(names, 45) }}", data) == "Jeff");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user