Skip to content

Commit

Permalink
Merge pull request #421 from sunng87/feature/helper-len
Browse files Browse the repository at this point in the history
Add len helper
  • Loading branch information
sunng87 committed Mar 7, 2021
2 parents 039ec51 + 9604486 commit b21352b
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 11 deletions.
34 changes: 34 additions & 0 deletions src/helpers/helper_boolean.rs → src/helpers/helper_extras.rs
@@ -1,4 +1,5 @@
//! Helpers for boolean operations
use serde_json::Value as Json;

use crate::json::value::JsonTruthy;

Expand All @@ -11,6 +12,14 @@ handlebars_helper!(lte: |x: i64, y: i64| x <= y);
handlebars_helper!(and: |x: Json, y: Json| x.is_truthy(false) && y.is_truthy(false));
handlebars_helper!(or: |x: Json, y: Json| x.is_truthy(false) || y.is_truthy(false));
handlebars_helper!(not: |x: Json| !x.is_truthy(false));
handlebars_helper!(len: |x: Json| {
match x {
Json::Array(a) => a.len(),
Json::Object(m) => m.len(),
Json::String(s) => s.len(),
_ => 0
}
});

#[cfg(test)]
mod test_conditions {
Expand Down Expand Up @@ -75,4 +84,29 @@ mod test_conditions {
.unwrap();
assert_eq!(&result, "ipsum");
}

#[test]
fn test_len() {
let handlebars = crate::Handlebars::new();

let result = handlebars
.render_template("{{len value}}", &json!({"value": [1,2,3]}))
.unwrap();
assert_eq!(&result, "3");

let result = handlebars
.render_template("{{len value}}", &json!({"value": {"a" :1, "b": 2}}))
.unwrap();
assert_eq!(&result, "2");

let result = handlebars
.render_template("{{len value}}", &json!({"value": "tomcat"}))
.unwrap();
assert_eq!(&result, "6");

let result = handlebars
.render_template("{{len value}}", &json!({"value": 3}))
.unwrap();
assert_eq!(&result, "0");
}
}
2 changes: 1 addition & 1 deletion src/helpers/mod.rs
Expand Up @@ -132,8 +132,8 @@ impl<
}

mod block_util;
pub(crate) mod helper_boolean;
mod helper_each;
pub(crate) mod helper_extras;
mod helper_if;
mod helper_log;
mod helper_lookup;
Expand Down
21 changes: 11 additions & 10 deletions src/registry.rs
Expand Up @@ -138,15 +138,16 @@ impl<'reg> Registry<'reg> {
self.register_helper("raw", Box::new(helpers::RAW_HELPER));
self.register_helper("log", Box::new(helpers::LOG_HELPER));

self.register_helper("eq", Box::new(helpers::helper_boolean::eq));
self.register_helper("ne", Box::new(helpers::helper_boolean::ne));
self.register_helper("gt", Box::new(helpers::helper_boolean::gt));
self.register_helper("gte", Box::new(helpers::helper_boolean::gte));
self.register_helper("lt", Box::new(helpers::helper_boolean::lt));
self.register_helper("lte", Box::new(helpers::helper_boolean::lte));
self.register_helper("and", Box::new(helpers::helper_boolean::and));
self.register_helper("or", Box::new(helpers::helper_boolean::or));
self.register_helper("not", Box::new(helpers::helper_boolean::not));
self.register_helper("eq", Box::new(helpers::helper_extras::eq));
self.register_helper("ne", Box::new(helpers::helper_extras::ne));
self.register_helper("gt", Box::new(helpers::helper_extras::gt));
self.register_helper("gte", Box::new(helpers::helper_extras::gte));
self.register_helper("lt", Box::new(helpers::helper_extras::lt));
self.register_helper("lte", Box::new(helpers::helper_extras::lte));
self.register_helper("and", Box::new(helpers::helper_extras::and));
self.register_helper("or", Box::new(helpers::helper_extras::or));
self.register_helper("not", Box::new(helpers::helper_extras::not));
self.register_helper("len", Box::new(helpers::helper_extras::len));

self.register_decorator("inline", Box::new(decorators::INLINE_DECORATOR));
self
Expand Down Expand Up @@ -612,7 +613,7 @@ mod test {

// built-in helpers plus 1
let num_helpers = 7;
let num_boolean_helpers = 9; // stuff like gt and lte
let num_boolean_helpers = 10; // stuff like gt and lte
let num_custom_helpers = 1; // dummy from above
assert_eq!(
r.helpers.len(),
Expand Down

0 comments on commit b21352b

Please sign in to comment.