Sha256: c8fcced1a62f8d4cc6ab9414fda3bf22d34f23583bc582f2f62b758f51928980

Contents?: true

Size: 1.39 KB

Versions: 2

Compression:

Stored size: 1.39 KB

Contents

require "tilt/template"
require "execjs"
require 'sprockets'

module Templebars
  module Rails
    # Tilt template renderer for precompiling Handlebars templates and storing
    # them in a global Templates object.
    class HandlebarsTemplate < ::Tilt::Template
      def self.default_mime_type
        "application/javascript"
      end

      def initialize_engine; end

      def prepare; end

      def evaluate( scope, locals, &block )
        global = Templebars::Rails::GLOBAL
        setup_global = "('undefined' == typeof #{global}) && (#{global} = {})"
        name = scope.logical_path.sub( /^templates\//, "" )
        precompiled_js = precompile( data )
        template_declaration = "#{global}[\"#{name}\"] = Handlebars.template(#{precompiled_js});"
        "#{setup_global}\n#{template_declaration}\n"
      end

      protected

      def precompile( template )
        runtime.call( "Handlebars.precompile", template, { data: {} } )
      end

      def runtime
        @runtime ||= ExecJS.compile( handlebars_js )
      end

      def handlebars_js
        path = File.join( File.dirname(__FILE__), "..", "..", "..", "vendor", "assets", "javascripts", "handlebars.js" )
        File.read( path )
      end
    end

    Sprockets.register_engine '.handlebars', HandlebarsTemplate
    Sprockets.register_engine '.hbs', HandlebarsTemplate
    Sprockets.register_engine '.hb', HandlebarsTemplate
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
templebars-0.0.6 lib/templebars/rails/templates.rb
templebars-0.0.5 lib/templebars/rails/templates.rb