gi/tilt-handlebars

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Tilt::Handlebars

[![Gem Version](https://badge.fury.io/rb/tilt-handlebars.svg)](https://rubygems.org/gems/tilt-handlebars)
[![Build Status](https://github.com/gi/tilt-handlebars/actions/workflows/ci.yml/badge.svg)](https://github.com/gi/tilt-handlebars/actions/workflows/ci.yml)
[![Test Coverage](https://api.codeclimate.com/v1/badges/19d544fcb843a50db1a2/test_coverage)](https://codeclimate.com/github/gi/tilt-handlebars/test_coverage)
[![Maintainability](https://api.codeclimate.com/v1/badges/19d544fcb843a50db1a2/maintainability)](https://codeclimate.com/github/gi/tilt-handlebars/maintainability)
[![MIT License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE.txt)

A [Tilt](https://github.com/rtomayko/tilt) interface for the official JavaScript
implementation of the [Handlebars.js](https://handlebarsjs.com) template engine.

[Handlebars::Engine](https://github.com/gi/handlebars-ruby) provides the API
wrapper. [MiniRacer](https://github.com/rubyjs/mini_racer) provides the
JavaScript execution environment.

See [Handlebars.js](http://handlebarsjs.com) for template syntax.

See [Handlebars::Engine](https://github.com/gi/handlebars-ruby) for API syntax.

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'tilt-handlebars'
```

And then execute:

    $ bundle install

Or install it yourself as:

    $ gem install tilt-handlebars

## Usage

Create a Handlebars template file with either a `.hbs` or `.handlebars` extension.

Example, in `hello.hbs`:

```
Hello, {{name}}. I'm {{emotion}} to meet you.
```

Then, render the template with Ruby:

```ruby
require 'tilt/handlebars'

template = Tilt.new('hello.hbs')
puts template.render(nil, name: "Joe", emotion: "happy")
```

Output:

    Hello, Joe. I'm happy to meet you.

### Partials

Partials are a file that can be loaded into another. For example, you may define a web page with
a master layout (`layout.hbs`), which includes a header (`header.hbs`) and footer (`footer.hbs`).
In this case, `header.hbs` and `footer.hbs` would be partials; `layout.hbs` includes these partials.

`layout.hbs`:

```html
<html>
    <head>...</head>
    <body>
        {{> header }}

        {{ content }}

        {{> footer }}
    </body>
</html>
```

Notice that you do not include the `.hbs` file extension in the partial name. Tilt Handlebars
will look for the partial relative to the enclosing file (`layout.hbs` in this example) with
either a `.hbs` or `.handlebars` extension.

#### Sinatra

Handlebars can be used with Sintra:

```ruby
require 'sinatra/handlebars'

class MyApp < Sinatra::Base
  helpers Sinatra::Handlebars

  get "/hello" do
    handlebars :hello, locals: {name: 'Joe'}
  end
end
```

This will use the template file named `views/hello.hbs`.

Partials can also be used with Sinatra. As described previously, partials will be loaded
relative to the enclosing template (e.g., in the `views` directory).

## Changelog

See [RELEASE_NOTES.md](RELEASE_NOTES.md) for more details.

## Contributing

Bug reports and pull requests are welcome on GitHub:
https://github.com/gi/tilt-handlebars.

See [CONTRIBUTING.md](CONTRIBUTING.md) for more details.

## License

The gem is available as open source under the terms of the
[MIT License](https://opensource.org/licenses/MIT).