mirror of
https://github.com/pantor/inja.git
synced 2026-03-06 01:06:25 +00:00
min, max functions
This commit is contained in:
@@ -183,6 +183,10 @@ render("{{ odd(42) }}", data); // false
|
||||
render("{{ even(42) }}", data); // true
|
||||
render("{{ divisibleBy(42, 7) }}", data); // true
|
||||
|
||||
// Maximum and minimum values from a list
|
||||
render("{{ max([1, 2, 3]) }}", data); // 3
|
||||
render("{{ min([-2.4, -1.2, 4.5]) }}", data); // -2.4
|
||||
|
||||
// Set default values if variables are not defined
|
||||
render("Hello {{ default(neighbour, \"my friend\") }}!"); // "Hello Peter!"
|
||||
render("Hello {{ default(colleague, \"my friend\") }}!"); // "Hello my friend!"
|
||||
|
||||
12
src/inja.hpp
12
src/inja.hpp
@@ -248,6 +248,8 @@ struct Parsed {
|
||||
DivisibleBy,
|
||||
Odd,
|
||||
Even,
|
||||
Max,
|
||||
Min,
|
||||
ReadJson,
|
||||
Default,
|
||||
Callback
|
||||
@@ -396,6 +398,14 @@ public:
|
||||
const int number = eval_expression<int>(element.args[0], data);
|
||||
return (number % 2 == 0);
|
||||
}
|
||||
case Parsed::Function::Max: {
|
||||
const std::vector<json> list = eval_expression<std::vector<json>>(element.args[0], data);
|
||||
return *std::max_element(list.begin(), list.end());
|
||||
}
|
||||
case Parsed::Function::Min: {
|
||||
const std::vector<json> list = eval_expression<std::vector<json>>(element.args[0], data);
|
||||
return *std::min_element(list.begin(), list.end());
|
||||
}
|
||||
case Parsed::Function::Not: {
|
||||
return not eval_expression<bool>(element.args[0], data);
|
||||
}
|
||||
@@ -601,6 +611,8 @@ public:
|
||||
{Parsed::Function::DivisibleBy, function_regex("divisibleBy", 2)},
|
||||
{Parsed::Function::Odd, function_regex("odd", 1)},
|
||||
{Parsed::Function::Even, function_regex("even", 1)},
|
||||
{Parsed::Function::Max, function_regex("max", 1)},
|
||||
{Parsed::Function::Min, function_regex("min", 1)},
|
||||
{Parsed::Function::ReadJson, Regex{"\\s*([^\\(\\)]*\\S)\\s*"}},
|
||||
{Parsed::Function::Default, function_regex("default", 2)}
|
||||
};
|
||||
|
||||
@@ -142,6 +142,18 @@ TEST_CASE("functions") {
|
||||
// CHECK_THROWS_WITH( env.render("{{ even(name) }}", data), "[json.exception.type_error.302] type must be number, but is string" );
|
||||
}
|
||||
|
||||
SECTION("max") {
|
||||
CHECK( env.render("{{ max([1, 2, 3]) }}", data) == "3" );
|
||||
CHECK( env.render("{{ max([-5.2, 100.2, 2.4]) }}", data) == "100.2" );
|
||||
// CHECK_THROWS_WITH( env.render("{{ even(name) }}", data), "[json.exception.type_error.302] type must be number, but is string" );
|
||||
}
|
||||
|
||||
SECTION("min") {
|
||||
CHECK( env.render("{{ min([1, 2, 3]) }}", data) == "1" );
|
||||
CHECK( env.render("{{ min([-5.2, 100.2, 2.4]) }}", data) == "-5.2" );
|
||||
// CHECK_THROWS_WITH( env.render("{{ even(name) }}", data), "[json.exception.type_error.302] type must be number, but is string" );
|
||||
}
|
||||
|
||||
SECTION("default") {
|
||||
CHECK( env.render("{{ default(11, 0) }}", data) == "11" );
|
||||
CHECK( env.render("{{ default(nothing, 0) }}", data) == "0" );
|
||||
|
||||
Reference in New Issue
Block a user