在Rails中使用coffee-haml-filter很容易。在Rails 2下,运行
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的fork,它比inem的original version更新,在撰写本文时。)。
在任何其他Ruby应用程序中,它稍微复杂但仍然相当容易(例如,使用Gemfile和Bundler.require
;或者更简单地直接从gerad的repo下载coffee.rb
文件,将它粘贴在一个文件夹中,并require
- 它。
但是,如果我只是在命令行上使用haml
怎么办?有没有办法以Haml在系统范围内使用它的方式安装自定义过滤器?或者我可以使用Haml模板中的require
语句来获取所需的过滤器吗?
答案 0 :(得分:4)
制作自定义HAML过滤器应该像在类中包含Haml::Filters::Base
模块并覆盖render方法一样简单,但我无法使用-r
选项haml
1}}脚本,或试图直接将过滤器代码放入HAML模板。由于过滤器“咖啡”未定义错误,该脚本过早失败。
所以我最终编写了自己的脚本。它没有使用您提到的coffee-haml-filter,而是自己实现了: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
答案 1 :(得分:4)
就在最近,一个新的CoffeeScript Haml过滤器可以在系统级安装,就像我想要的那样:https://github.com/paulnicholson/coffee-filter
但是,您必须在命令行上使用参数-r 'coffee-filter'
运行Haml。请参阅this discussion。