2012-09-05 11 views
7

Sto usando ruby ​​incorporato (ERB) per generare file di testo. Devo conoscere la directory del file modello per individuare un altro file relativo al percorso del file modello. C'è un metodo semplice all'interno di ERB che mi darà il nome del file e la directory del file modello corrente?Come trovo il percorso di un file modello usando ERB?

Sto cercando qualcosa di simile a __FILE__, ma dando il file del modello anziché (erb).

risposta

8

Quando si utilizza l'api ERB da Ruby, si fornisce una stringa a ERB.new, quindi non c'è davvero alcun modo per ERB di sapere da dove proviene quel file. Si può comunque dire l'oggetto quale file proviene utilizzando l'attributo filename:

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

Ora è possibile utilizzare __FILE__ in my_template.erb e sarà fare riferimento al nome del file. (Questo è ciò che fa l'eseguibile erb, ed è per questo che __FILE__ funziona nei file ERB che si eseguono dalla riga di comando).

per rendere questo un po 'un po' più utile, si potrebbe patch di scimmia ERB con un nuovo metodo per leggere da un file e impostare la filename:

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 

È ora possibile utilizzare questo metodo per leggere i file ERB e __FILE__ dovrebbe funzionare in loro, e si riferiscono al file vero e proprio e non solo (erb):

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

mi piacerebbe sapere come fare questo con erubis troppo – 2rs2ts

+0

NVM, è lo stesso con erubis. imposta semplicemente '.filename = 'my_template.erb'' – 2rs2ts

Problemi correlati