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(これはすべて、この記事の執筆時点で、inemの元のバージョンよりも最新のgeradのフォークを使用することを前提としています。)

他のRubyアプリケーションでは、少し注意が必要ですが、それでもかなり簡単に実行できます(たとえば、GemfileとBundler.require;を使用するか、coffee.rbファイルをgeradのリポジトリから直接ダウンロードしてフォルダーに貼り付け、require-ingするだけです)。

しかしhaml、たとえば、コマンドラインで使用している場合はどうなりますか?Hamlがシステム全体で使用するような方法でカスタムフィルターをインストールする方法はありますか?またはrequire、Hamlテンプレート内のステートメントを使用して、必要なフィルターを取得できますか?

4

2 に答える 2

4

カスタムHAMLフィルターの作成はHaml::Filters::Base、クラスにモジュールを含めてrenderメソッドをオーバーライドするのと同じくらい簡単です-rが、スクリプトのオプションを使用して機能させることもhaml、フィルターコードを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
于 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 に答える