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
mi piacerebbe sapere come fare questo con erubis troppo – 2rs2ts
NVM, è lo stesso con erubis. imposta semplicemente '.filename = 'my_template.erb'' – 2rs2ts