Perl6 library for the Mustache template format
Perl6 Other
Switch branches/tags
Nothing to show
Latest commit bc7cabe Apr 23, 2017 @softmoth committed on GitHub Merge pull request #18 from samcv/license
Use SPDX identifier in license field of META.info

README.md

Perl6 implementation of Mustache templates, http://mustache.github.io/.

Build Status

Synopsis

use Template::Mustache;

# Call .render as a class method
Template::Mustache.render('Hello, {{planet}}!', { planet => 'world' }).say;

# Or instantiate an instance
my $stache = Template::Mustache.new: :from<./views>;

# Subroutines are called
say $stache.render('The time is {{time}}', {
    time => { ~DateTime.new($now).local }
});

my @people =
    { :name('James T. Kirk'), :title<Captain> },
    { :name('Wesley'), :title('Dread Pirate'), :emcee },
    { :name('Dana Scully'), :title('Special Agent') },
    ;

# See this template in ./t/views/roster.mustache
$stache.render('roster', { :@people }).say;

my %context =
    event => 'Masters of the Universe Convention',
    :@people,
    ;
my %partials =
    welcome =>
        qq:b{Welcome to the {{event}}! We’re pleased to have you here.\n\n},
    ;

# See this result in ./t/50-readme.t
Template::Mustache.render(q:to/EOF/,
        {{> welcome}}
        {{> roster}}

            Dinner at 7PM in the Grand Ballroom. Bring a chair!
        EOF
    %context,
    :from([%partials, './views'])
).say;

More Examples and Tests

The Mustache spec provides a wealth of examples to demonstrate exactly how the format behaves.

https://github.com/mustache/spec/tree/master/specs/

To run tests,

# NB Ensure you are using the default 'perl6' branch, not 'master'
git clone git@github.com:softmoth/mustache-spec.git ../mustache-spec
PERL6LIB=./lib prove -e perl6 -v

All spec tests pass: https://travis-ci.org/softmoth/p6-Template-Mustache. The perl6 branch just updates the .json files to match the .yml sources (needed until someone writes a Perl 6 YAML parser, hint, hint), and adds perl6 lambda code strings for that portion of the specs.

Other Mustache Implementations

There are many, many Mustache implementations in various languages. Some of note are:

TODO

  • object support (not just hashes and arrays)

  • parsed template caching

  • global helpers (context items that float at the top of the stack)

  • template inheritance: https://github.com/mustache/spec/issues/38, etc.

  • database loader

  • pragmas (FILTERS?)

License

Artistic License 2.0