Swiftpack.co -  AlwaysRightInstitute/Mustache as Swift Package
Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
AlwaysRightInstitute/Mustache
A simple Mustache parser/evaluator for Swift
.package(url: "https://github.com/AlwaysRightInstitute/Mustache.git", from: "1.0.1")

Mustache

Swift4 Swift5 macOS tuxOS Build and Test

A simple Mustache parser/evaluator for Swift.

Mustache is a very simple templating language. Implementations are available for pretty much any programming language (check the Mustache website) - this is one for Swift.

In the context of Noze.io you don't need to call this manually, but you can just use the Mustache template support in the Noze.io Express module. Checkout the express-simple app as an example on how to do this.

This Mustache implementation comes with a very simple Key-Value coding implementation, which is used to extract values from model objects for rendering. With that you can render both, generic Dictionary/Array structures as well as Swift objects with properties. Since the reflection capabilities of Swift are pretty limited, so is the KVC implementation.

Example

Sample Mustache:

Hello {{name}}
You have just won {{& value}} dollars!
{{#in_ca}}
  Well, {{{taxed_value}}} dollars, after taxes.
{{/in_ca}}
{{#addresses}}
  Has address in: {{city}}
{{/addresses}}
{{^addresses}}
  Has NO addresses
{{/addresses}}

The template features value access: {{name}}, conditionals: {{#in_ca}}, as well as repetitions: {{#addresses}}.

Sample code to parse and evaluate the template:

let sampleDict  : [ String : Any ] = [
  "name"        : "Chris",
  "value"       : 10000,
  "taxed_value" : Int(10000 - (10000 * 0.4)),
  "in_ca"       : true,
  "addresses"   : [
    [ "city"    : "Cupertino" ]
  ]
]

var parser = MustacheParser()
let tree   = parser.parse(string: template)
let result = tree.render(object: sampleDict)

You get the idea.

Swift 5 Dynamic Callable

In Swift 5 you can expose Mustache templates as regular Swift functions.

To declare a Mustache backed function:

let generateHTMLForWinner = Mustache(
    """
    {% raw %}Hello {{name}}
    You have just won {{& value}} dollars!
    {{#in_ca}}
        Well, {{{taxed_value}}} dollars, after taxes.
    {{/in_ca}}
    {{#addresses}}
        Has address in: {{city}}
    {{/addresses}}
    {{^addresses}}
        Has NO addresses
    {{/addresses}}{% endraw %}
    """
)

To call the function:

let winners = [
    generateHTMLForWinner(
        name: "Chris", value: 10000,
        taxed_value: 6000, in_ca: true,
        addresses: [[ "city": "Cupertino" ]]
    ),
    generateHTMLForWinner(
        name: "Michael", value: 6000,
        taxed_value: 6000, in_ca: false,
        addresses: [[ "city": "Austin" ]]
    )
]

Checkout our blog for more info on this.

Who

mustache is brought to you by The Always Right Institute and ZeeZide. We like feedback, GitHub stars, cool contract work, presumably any form of praise you can think of. We don't like people who are wrong.

Ask questions on the Noze.io Slack.

GitHub

link
Stars: 20
Last commit: 1 week ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Release Notes

1.0.0 Finally Final
18 weeks ago

This is good stuff, can be tagged 1.0.0 I think :-)

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API