2011-03-02 71 views
4

在Rails中很容易使用coffee-haml-filter。在梁2,运行如何在Ruby/Rails之外的Haml中嵌入CoffeeScript?

script/plugin install git://github.com/gerad/coffee-haml-filter.git 

在Rails 3中,你可以

gem 'coffee-haml-filter', :git => 'git://github.com/gerad/coffee-haml-filter.git' 

行添加到您的Gemfile,并做了bundle install。 (这是假设你想使用gerad的分支,在撰写本文时,它比inem的分支original version更新)。

在任何其他的Ruby应用程序,这是稍微棘手,但还是很容易做到这一点(例如,使用的Gemfile和Bundler.require;或直接从种族传说的回购下载coffee.rb文件,一个文件夹中坚持它只是多了, require -ing it)。

但是如果我只是在命令行上使用haml呢?有没有办法以Haml在系统范围内使用它的方式安装自定义过滤器?或者我可以使用Haml模板中的require语句来获取所需的过滤器?

回答

4

制作一个自定义的HAML过滤器应为包括你们班Haml::Filters::Base模块和重写渲染方法一样容易,但我无法使其与haml脚本-r选择工作,或者试图把过滤器直接编码到HAML模板中。该脚本刚刚失败,因为过滤器“咖啡”未定义错误。

所以我最终写了我自己的脚本。它没有使用你提到的咖啡哈姆过滤器,但它自己实现了一个:coffee过滤器。它将haml脚本文件名作为参数。它绝对可以写得更好,但对我的目的来说,它效果很好。

#! /usr/bin/env ruby 
require 'tempfile' 
require 'haml' 

TEMPDIR = '/dev/shm' 

module Haml::Filters::Coffee 
    include Haml::Filters::Base 

    def render(text) 
    tmpf = Tempfile.new('hamlcoffee', TEMPDIR) 
    tmpf.write text 
    tmpf.close 
    output = `coffee -pl '#{tmpf.path}'` 

    # strip the first and last line, 
    # since the js code is wrapped as a function 
    output = output.lines.collect[1..-2].join 
    return output 
    end 
end 

template = File.read(ARGV[0]) 
haml_engine = Haml::Engine.new(template) 
output = haml_engine.render 
puts output 
+0

嗯...没有想到这种方法。谢谢。 – 2011-04-25 00:12:00