2009-06-11 14 views

risposta

25

È necessario disporre di tutto ciò che è necessario nella directory Ruby/Bin. Sul mio sistema (WinXP, Ruby 1.8.6), ho ruby/bin/erb.bat

erb.bat [switches] [inputfile] 
    -x    print ruby script 
    -n    print ruby script with line number 
    -v    enable verbose mode 
    -d    set $DEBUG to true 
    -r [library]  load a library 
    -K [kcode]  specify KANJI code-set 
    -S [safe_level] set $SAFE (0..4) 
    -T [trim_mode] specify trim_mode (0..2, -) 
    -P    ignore lines which start with "%" 

così erb your_erb_file.erb dovrebbe scrivere il risultato su STDOUT.

(EDIT:. Windows ha erb.bat e proprio "erb" plain Il file .bat è solo un wrapper per Erb, che credo dovrebbe fare lo stesso lavoro di comando più o meno lo stesso su qualsiasi sistema operativo)

Vedere la discussione prag prog book (inizia circa a metà della pagina).

Si noti inoltre che Jack Herrington ha scritto a whole book sulla generazione del codice che utilizza Ruby/ERB.

+1

Ottimo! Io ** stavo ** cercando di eseguire erb (senza sapere se è corretto) ma non ci sono riuscito, quindi ho pensato che non può essere fatto direttamente, ma invece ho bisogno di una libreria esterna. Dopo la tua risposta mi sono reso conto che avevo installato solo un rubino personalizzato, che non era nel percorso del sistema;) Grazie! –

+0

Ne ho bisogno per uno script ant (deve essere eseguito su tutte le piattaforme). Ho notato che qui sotto Linux ho erb (senza estensione), ma hai menzionato erb.bat (quindi presumo che sotto windows non hai erb senza estensione). Puoi suggerirmi come avviare erb in modo multipiattaforma? –

+0

Questo, ed è possibile iniettare variabili come un boss: erb <(echo -n '<% somevar = "yay"%>'; cat your.erb) –

23

Scrivi uno script rubino che lo fa. La documentazione API è qui: http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/

Ad esempio:

template = ERB.new File.read("path/to/template.erb"), nil, "%" 
template.result(binding) 

(Dove legame è un legame con i @vars che le esigenze del modello.)

+0

Avviso - alcune versioni di Ruby non supportano varie funzionalità di Rails ERB (ad es. ometti terminazioni di righe vuote). – lzap

14

Un'altra opzione sarebbe quella di utilizzare ruby ​​- e, dal momento che ERB itslef è così semplice.

Qualcosa di simile:

ruby -rerb -e "puts ERB.new(File.read(<file name here>)).result" 

Tuttavia, presumo di avere un contesto che si desidera rendere il modello in Come vi aspettate di ottenere quel contesto.? A titolo di esempio, check out:

ruby -rerb -e "hello = 'hello'; puts ERB.new('<%= hello %> world').result(binding)" 

che stamperà fuori "ciao mondo", con il livello superiore, in cui è stata definita la variabile hello, come il legame.

0

Ho provato a commentare questo, ma il collegamento commenti non è disponibile.

Sto usando questo:

template = ERB.new File.new("path/to/template.erb").read, nil, "%" 
template.result(binding) 

Dal distacco di cui sopra: e ho trovato quello che penso che potrebbe essere un problema:

Sto creando file batch DOS come:

%JAVA_HOME%\bin\jar -xvf <%=inputfile%>... 

E ho trovato strano problema cosa - ottengo questo quando ho eseguito con il codice di cui sopra:

Processing Template test.txt 
erb):2:in `render': compile error (SyntaxError) 
erb):2: syntax error, unexpected tSTRING_BEG, expecting $end 
erbout.concat "\n" 
      ^
     from DBUser.rb:49:in `render' 
     from DBUser.rb:43:in `each' 
     from DBUser.rb:43:in `render' 
     from DBUser.rb:81 

Ho provato quanto segue, e ottenuto intorno al mio problema particolare - non so se questa è la risposta giusta per tutti ...

template = ERB.new File.new("path/to/template.erb").read 
template.result(binding) 
12

Se è possibile passare alla ERB Erubis, la vostra soluzione dei problemi è semplice come :

require 'erubis' 
template = File.read("sample_file.erb") 
template = Erubis::Eruby.new(template) 
template.result(:your_variable => "sample") 
3

Trovato questa domanda durante il tentativo di TE s i miei modelli di burattini.

è conclusa con questa soluzione:

  1. Lungo il foo.erb creare un file foo.vars.erb
  2. mettere tutte le variabili di modello in quel nuovo file, ad esempio:

    <% @my_param="foo bar" %> 
    <% @another_param=123 %> 
    

    o (equivalente):

    <% 
    @my_param="foo bar" 
    @another_param=123 
    %> 
    
  3. Sulla riga di comando eseguire questo:

    cat foo.vars.erb foo.erb | erb 
    

Il modello completamente reso dovrebbe ora essere stampato a std-out. Da lì puoi controllare l'output a mano, oppure puoi prendere diff (o altri strumenti) per confrontarlo con un output pre-renderizzato.

+0

Perfetto/grazie. Questo è esattamente il caso d'uso che stavo cercando (test fantoccio) – JDS

Problemi correlati