From 735aed2e4093e32b2b7e5b6ee1ef6a2de22f6df7 Mon Sep 17 00:00:00 2001 From: Brian Sharon Date: Sat, 16 Mar 2024 15:16:11 -0600 Subject: [PATCH] Update library definitions, update example comments --- examples/basic/basic.ino | 8 ++++-- examples/partials/partials.ino | 51 +++++++++++++++++----------------- library.json | 39 ++++++++++++++++++++++++++ library.properties | 2 +- 4 files changed, 72 insertions(+), 28 deletions(-) create mode 100644 library.json diff --git a/examples/basic/basic.ino b/examples/basic/basic.ino index 5d103bd..238c439 100644 --- a/examples/basic/basic.ino +++ b/examples/basic/basic.ino @@ -13,7 +13,7 @@ void setup() { Serial.begin(115200); Serial.println(""); - // Create a JSON object to hold the data that we'll use in our template + // Create a JsonDocument instance to hold the data that we'll use in our template JsonDocument data; data["name"] = "World"; data["value"] = 42; @@ -25,7 +25,11 @@ void setup() { String output = ministache::render(templateString, data); // Print the result - Serial.println(output); // Prints: Hello, World! The answer is 42. + Serial.println(output); + + // Expected output: + // + // Hello, World! The answer is 42. } void loop() { diff --git a/examples/partials/partials.ino b/examples/partials/partials.ino index e88848d..7a3c612 100644 --- a/examples/partials/partials.ino +++ b/examples/partials/partials.ino @@ -1,11 +1,9 @@ #include /*************************************************** - This is a very basic example for the ministache library + This is an example of how to use Mustache partials with the Ministache library (https://github.com/floatplane/ministache). - It shows how the library can be used to render a Mustache template with a JSON object. - For more details on Mustache syntax, see http://mustache.github.io/mustache.5.html ****************************************************/ @@ -13,39 +11,42 @@ void setup() { Serial.begin(115200); Serial.println(""); - // Create a JSON object to hold the data that we'll use in our template. It looks like this: - // { - // "Alice": { - // "name": "Alice", - // "role": "Engineer" - // }, - // "Bob": { - // "name": "Bob", - // "role": "Intern" - // } - // } + // Create a JsonDocument instance to hold the data that we'll use in our template + const char* json = R"""( + { + "people": [ + { + "name": "Alice", + "role": "Engineer" + }, + { + "name": "Bob", + "role": "Intern" + } + ] + } + )"""; JsonDocument data; - auto people = data["people"].to(); - auto alice = people.add(); - alice["name"] = "Alice"; - alice["role"] = "Engineer"; - auto bob = people.add(); - bob["name"] = "Bob"; - bob["role"] = "Intern"; - - // Create a template string that renders the data for a single person. This is a partial. + deserializeJson(data, json); + + // Create a template string that renders the data for a single person. This is a *partial*. String personString = "Name: {{name}}\tRole: {{role}}\n"; // Create a template string that renders the data for all people. This is the main template. + // Note that it loops over a field called "people" and includes the partial "person" for each of + // them. String reportString = "People report:\n{{#people}}{{> person}}{{/people}}"; // Render the template with the data. The third argument is the partials list. This - // defines how to map a partial reference like {{>person }} to a particular template - // (personString). + // defines how to map a partial reference like "person" to a particular template + // ("personString"). String output = ministache::render(reportString, data, {{"person", personString}}); // Print the result Serial.println(output); + + // Expected output: + // // People report: // Name: Alice Role: Engineer // Name: Bob Role: Intern diff --git a/library.json b/library.json new file mode 100644 index 0000000..b9d2912 --- /dev/null +++ b/library.json @@ -0,0 +1,39 @@ +{ + "name": "Ministache", + "version": "1.0.0", + "description": "Ministache is a small, fast and spec-complete implementation of the Mustache templating language for Arduino. All core Mustache tags are supported: interpolation, partials, sections, inverted sections, custom delimiters, and comments.", + "keywords": ["mustache", "moustache", "text", "text processor", "template", "logic-less", "html"], + "repository": { + "type": "git", + "url": "https://github.com/floatplane/ministache" + }, + "authors": [ + { + "name": "Brian Sharon", + "url": "https://github.com/floatplane", + "maintainer": true + } + ], + "license": "MIT", + "platforms": "*", + "headers": "Ministache.h", + "examples": [ + { + "name": "Basic", + "base": "examples/basic", + "files": ["basic.ino"] + }, + { + "name": "Partials", + "base": "examples/partials", + "files": ["partials.ino"] + } + ], + "dependencies": { + "bblanchon/ArduinoJson": "^7.0.0" + }, + "build": { + "unflags": "-std=gnu++11", + "flags": "-std=gnu++17" + } +} \ No newline at end of file diff --git a/library.properties b/library.properties index 97b36ce..cda687d 100644 --- a/library.properties +++ b/library.properties @@ -3,7 +3,7 @@ version=1.0.0 author=Brian Sharon maintainer=Brian Sharon sentence=Implementation of the Mustache templating language for Arduino -paragraph=Ministache is a small, fast and complete implementation of the Mustache templating language for Arduino. +paragraph=Ministache is a small, fast and spec-complete implementation of the Mustache templating language for Arduino. category=Data Processing url=https://github.com/floatplane/ministache architectures=*