Sha256: f0c709b7daeb94ecae1b52bfbe33f42f241a26c4c9c05917cf8546dd2ed0cfec

Contents?: true

Size: 1.04 KB

Versions: 4

Compression:

Stored size: 1.04 KB

Contents

require 'tilt/template'
require "execjs"

module EmberRails

  # = Sprockets engine for HandlebarsJS templates
  class HjsTemplate < Tilt::Template

    def self.default_mime_type
      'application/javascript'
    end

    def initialize_engine
    end

    def prepare
    end

    # Generates Javascript code from a HandlebarsJS template.
    # The Ember template name is derived from the lowercase logical asset path
    # by replacing non-alphanum characheters by underscores.
    def evaluate(scope, locals, &block)
      "Ember.TEMPLATES[\"#{scope.logical_path}\"] = Handlebars.template(#{precompile(data)});\n"
    end

    private

      def precompile(template)
        runtime.call("EmberRails.precompile", template)
      end

      def runtime
        Thread.current[:hjs_runtime] ||= ExecJS.compile(ember)
      end

      def ember
        [ "ember-precompiler.js", "ember.js" ].map do |name|
          File.read(File.expand_path(File.join(__FILE__, "..", "..", "..", "vendor/assets/javascripts/#{name}")))
        end.join("\n")
      end

  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ember-rails-0.2.4 lib/ember-rails/hjs_template.rb
ember-rails-0.2.3 lib/ember-rails/hjs_template.rb
ember-rails-0.2.2 lib/ember-rails/hjs_template.rb
ember-rails-0.2.1 lib/ember-rails/hjs_template.rb