Barber handles all your Handlebars precompilation needs. You can use Barber as part of your project build system or with someting like rake-pipeline.
Installation
Add this line to your application's Gemfile:
gem 'barber'
And then execute:
$ bundle
Or install it yourself as:
$ gem install barber
Usage
You will mainly interact with the utility classes. The utitlity classes delegate to the actual precompiler. They support two primary use cases:
- Precompiling individual handlebars files.
- Precompiling inline handlebars templates.
Here are some code examples:
require 'barber'
Barber::FilePrecompiler.call(File.read("template.handlebars"))
# "Handlebars.template(function(...));"
Barber::InlinePrecompiler.call(File.read("template.handlebars"))
# Note the missing semicolon. You can use this with gsub to replace
# calls to inline templates
# "Handlebars.template(function(...))"
Barber also packages Ember precompilers.
require 'barber'
Barber::Ember::FilePrecompiler.call(File.read("template.handlebars"))
# "Ember.Handlebars.template(function(...));"
Barber::Ember::InlinePrecompiler.call(File.read("template.handlebars"))
# "Ember.Handlebars.template(function(...))"
Building Custom Precompilers
All of Barber's utility classes (demoed above) delegate to
Barber::Precompiler
. Barber::Precompiler
implements a simple public
interface you can use to to build your own. A precompiler simply exposes
a Barber.precompile
JS property. Override
Barber::Precompiler#sources
to setup your own. Source must respond to
#read
. Here is an example:
require 'barber'
require 'stringio'
class CustomPrecompiler < Barber::Precompiler
def sources
[StringIO.new(custom_compiler)]
end
def custom_compiler
%Q[var Barber = { precompile: function(template) { return "Hello World!" } };]
end
end
Usage with rake-pipeline-web-filters
All the utility classes implement call
. This means they can be
subsituted for procs/lambda where needed. Here's how you can get
precompilation of your ember templates with rake-pipeline-web-filters:
require 'barber'
match "**/*.handlebars" do
handlebars :wrapper_proc => Barber::Ember::FilePrecompiler
end
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request