4

在 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 的原始版本更新。)。

在任何其他 Ruby 应用程序中,它稍微有点棘手,但仍然相当容易做到这一点(例如,使用 Gemfile 和Bundler.require; 或者更简单地通过coffee.rb直接从 gerad 的 repo 下载文件,将其粘贴到文件夹中,然后require-ing 它)。

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

4

2 回答 2

4

制作自定义 HAML 过滤器应该像在您的类中包含模块并覆盖渲染方法一样简单,但是我无法使用脚本选项Haml::Filters::Base使其工作,或者尝试将过滤器代码直接放入 HAML 模板中。该脚本过早地失败,过滤器“咖啡”未定义错误。-rhaml

所以我最终编写了自己的脚本。它没有使用您提到的咖啡哈姆过滤器,而是: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
于 2011-04-24T22:19:29.210 回答
4

就在最近,一个新的 CoffeeScript Haml 过滤器问世了,它可以在系统级别安装,就像我想要的那样:https ://github.com/paulnicholson/coffee-filter

不过,您必须使用-r 'coffee-filter'命令行上的参数运行 Haml。请参阅此讨论

于 2011-04-29T18:41:46.430 回答