mirror of
https://github.com/pantor/inja.git
synced 2026-04-22 15:59:26 +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("{{ even(42) }}", data); // true
|
||||||
render("{{ divisibleBy(42, 7) }}", 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
|
// Set default values if variables are not defined
|
||||||
render("Hello {{ default(neighbour, \"my friend\") }}!"); // "Hello Peter!"
|
render("Hello {{ default(neighbour, \"my friend\") }}!"); // "Hello Peter!"
|
||||||
render("Hello {{ default(colleague, \"my friend\") }}!"); // "Hello my friend!"
|
render("Hello {{ default(colleague, \"my friend\") }}!"); // "Hello my friend!"
|
||||||
|
|||||||
12
src/inja.hpp
12
src/inja.hpp
@@ -248,6 +248,8 @@ struct Parsed {
|
|||||||
DivisibleBy,
|
DivisibleBy,
|
||||||
Odd,
|
Odd,
|
||||||
Even,
|
Even,
|
||||||
|
Max,
|
||||||
|
Min,
|
||||||
ReadJson,
|
ReadJson,
|
||||||
Default,
|
Default,
|
||||||
Callback
|
Callback
|
||||||
@@ -396,6 +398,14 @@ public:
|
|||||||
const int number = eval_expression<int>(element.args[0], data);
|
const int number = eval_expression<int>(element.args[0], data);
|
||||||
return (number % 2 == 0);
|
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: {
|
case Parsed::Function::Not: {
|
||||||
return not eval_expression<bool>(element.args[0], data);
|
return not eval_expression<bool>(element.args[0], data);
|
||||||
}
|
}
|
||||||
@@ -601,6 +611,8 @@ public:
|
|||||||
{Parsed::Function::DivisibleBy, function_regex("divisibleBy", 2)},
|
{Parsed::Function::DivisibleBy, function_regex("divisibleBy", 2)},
|
||||||
{Parsed::Function::Odd, function_regex("odd", 1)},
|
{Parsed::Function::Odd, function_regex("odd", 1)},
|
||||||
{Parsed::Function::Even, function_regex("even", 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::ReadJson, Regex{"\\s*([^\\(\\)]*\\S)\\s*"}},
|
||||||
{Parsed::Function::Default, function_regex("default", 2)}
|
{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" );
|
// 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") {
|
SECTION("default") {
|
||||||
CHECK( env.render("{{ default(11, 0) }}", data) == "11" );
|
CHECK( env.render("{{ default(11, 0) }}", data) == "11" );
|
||||||
CHECK( env.render("{{ default(nothing, 0) }}", data) == "0" );
|
CHECK( env.render("{{ default(nothing, 0) }}", data) == "0" );
|
||||||
|
|||||||
Reference in New Issue
Block a user