Skip to content

A (mostly) drop-in replacement for Handlebars.rb based on MiniRacer rather than therubyracer.

License

Notifications You must be signed in to change notification settings

combinaut/minibars

Repository files navigation

Tests

Minibars

A (mostly) drop-in replacement for Handlebars.rb based on MiniRacer rather than therubyracer.

An appropriately revised quote from the Handlebars.rb README:

This uses therubyracerMiniRacer to bind to the actual JavaScript implementation of Handlebars.js so that you can use it from ruby.

Why?

Minibars is a stripped down implementation of Handlerbars.rb using MiniRacer. It eschews capabilities that require two-way binding with the JS runtime, making it a good choice for those with simple Handlebars templates who need an upgrade path for their ARM64 architecture.

Usage

Simple Stuff

require 'minibars'
minibars = Minibars::Context.new
template = minibars.compile("{{say}} {{what}}")
template.call(say: "Hey", what: "Yuh!") #=> "Hey Yuh!"

Functions as Properties

This feature differs from Handlebars.rb since Minibars templates won't pass a this argument to property functions.

template.call(say: "Hey ", what: ->{ ("yo" * 2) + "!"}) #=> "Hey yoyo!"

Helpers

JavaScript helpers can be loaded as individual files or as a glob

minibars.load_helpers("#{__dir__}/javascripts/helpers/**/*.js")
minibars.load_helper("#{__dir__}/javascripts/helpers/admin.js")

Partials

You can directly register partials

minibars.register_partial("whoami", "I am {{who}}")
minibars.compile("{{>whoami}}").call(who: 'Legend') #=> I am Legend

SafeStrings

By default, handlebars will escape strings that are returned by your block helpers. To mark a string as safe:

template = minibars.compile("{{safe}}")
template.call(safe: Minibars::SafeString.new("<pre>Totally Safe!<pre>"))

Compatibility

Handlebars::Context aliases Minibars::Context and Handlebars::SafeString aliases Minibars::SafeString unless they are already defined.

require 'handlebars` # Applies the compatibility layer found in lib/handlebars.rb and loads minibars

Limitations

  • No Ruby helpers

Security

In general, you should not trust user-provided templates: a template can call any method (with no arguments) or access any property on any object in the Minibars::Context.

If you'd like to render user-provided templates, you'd want to make sure you do so in a sanitized Context, e.g. no filesystem access, read-only or no database access, etc.

About

A (mostly) drop-in replacement for Handlebars.rb based on MiniRacer rather than therubyracer.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published