2012-09-05 12 views
7

私はテキストファイルを生成するために埋め込みルビー(ERB)を使用しています。私は、テンプレートファイルのパスを基準にして別のファイルを見つけるために、テンプレートファイルのディレクトリを知る必要があります。現在のテンプレートファイルのファイル名とディレクトリを教えてくれる簡単な方法がERB内にありますか?ERBを使用してテンプレートファイルのパスを見つけるにはどうすればよいですか?

__FILE__と似たようなものを探していますが、(erb)の代わりにテンプレートファイルを指定しています。

答えて

8

RubyのERB APIを使用する場合、文字列はERB.newになります。そのため、ERBがそのファイルの場所を知る方法は実際にはありません。今、あなたはmy_template.erb__FILE__を使用することができ、それは、ファイルの名前を参照します

t = ERB.new(File.read('my_template.erb') 
t.filename = 'my_template.erb' 

:あなたはしかし、それはfilename属性を使用してから来たファイルオブジェクトを伝えることができます。 (これはerb実行可能ファイルの内容なので、コマンドラインから実行するERBファイルでは__FILE__が動作します)。

このビットビットより有用にするために、あなたはファイルから読み取られ、filenameを設定するための新しい方法とモンキーパッチERBできます

require 'erb' 

class ERB 
    # these args are the args for ERB.new, which we pass through 
    # after reading the file into a string 
    def self.from_file(file, safe_level=nil, trim_mode=nil, eoutvar='_erbout') 
    t = new(File.read(file), safe_level, trim_mode, eoutvar) 
    t.filename = file 
    t 
    end 
end 

あなたは今、ERBファイルを読み込むために、このメソッドを使用することができます、および__FILE__その中で作業し、実際のファイルだけでなく、(erb)を参照してください:

t = ERB.from_file 'my_template.erb' 
puts t.result 
+0

私はerubisあまりに – 2rs2ts

+0

NVMでこれを行う方法を知ってみたい、それがerubisと同じです。 '.filename = 'my_template.erb''を設定するだけです – 2rs2ts

関連する問題