2009-06-11 15 views

Respuesta

25

Debería tener todo lo que necesita en su directorio ruby ​​/ bin. En mi sistema (WinXP, Ruby 1.8.6), tengo 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 "%" 

por lo erb your_erb_file.erb debe escribir el resultado en STDOUT.

(EDIT:. Windows ha erb.bat y simplemente "erb" El archivo .bat es sólo un envoltorio de Erb, que supongo que debe hacer el mismo trabajo de comandos o menos lo mismo en cualquier sistema operativo)

Consulte la discusión prag prog book (comienza a la mitad de la página).

Tenga en cuenta también que Jack Herrington escribió a whole book sobre la generación de código que utiliza Ruby/ERB.

+1

¡Estupendo! I ** estaba ** tratando de ejecutar erb (sin saber si es correcto) pero falló, así que pensé que no se puede hacer directamente, sino que necesito una biblioteca externa en su lugar. Después de su respuesta, me di cuenta de que solo tenía un rubí personalizado instalado, que no estaba en la ruta del sistema;) ¡Gracias! –

+0

Lo necesito para un script ant (tiene que ejecutarse en todas las plataformas). Me di cuenta de que aquí en Linux tengo erb (sin extensión), pero mencionaste erb.bat (así que supongo que en Windows no tienes erb sin extensión). ¿Puede sugerirme cómo iniciar erb de forma multiplataforma? –

+0

Esto, y puede inyectar variables como un jefe: erb <(echo -n '<% somevar = "yay"%>'; cat your.erb) –

23

Escriba un script de ruby ​​que lo haga. La documentación de la API está aquí: http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/

Por ejemplo:

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

(Donde unión es una unión con los @vars que las necesidades de plantilla.)

+0

Advertencia: algunas versiones de Ruby no son compatibles con varias funciones de Rails ERB (por ejemplo, omita terminaciones de líneas en blanco). – lzap

14

Otra opción sería utilizar rubí - e, ya que ERB itslef es tan simple.

Algo así como:

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

Sin embargo, suponga que tiene un contexto que desea hacer que la plantilla en Cómo estás esperando para conseguir ese contexto.? A modo de ejemplo, echa un vistazo a:

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

el que se imprimirá "hola mundo", utilizando el nivel superior, donde se definió la variable hello, como la unión.

0

He intentado comentar sobre esto, pero los comentarios no están disponibles.

estoy usando esto:

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

Desde la publicación anterior, y encontré lo que creo que puede ser un problema:

estoy creando archivos por lotes de DOS como:

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

Y encontré raro problema cosa - me sale esto cuando funciono con el código anterior:

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 

He intentado lo siguiente, y tiene alrededor de mi problema particular - no estoy seguro si esta es la respuesta correcta para todo el mundo ...

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

si puede cambiar a ERB Erubis, su resolución de problemas es tan simple como :

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

encontrado esta cuestión al tratar a te st mis plantillas de Puppet.

terminó con esta solución:

  1. A lo largo de su foo.erb crear un archivo foo.vars.erb
  2. poner todas sus variables de plantilla en ese nuevo archivo, por ejemplo:

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

    o (equivalente):

    <% 
    @my_param="foo bar" 
    @another_param=123 
    %> 
    
  3. En la línea de comandos ejecutar este:

    cat foo.vars.erb foo.erb | erb 
    

Su plantilla completamente rendido ahora se debe imprimir a std-out. Desde allí, verifica la salida a mano, o puede tomar diff (u otras herramientas) para compararla con una salida renderizada previamente.

+0

Perfecto/gracias. Este es exactamente el caso de uso que estaba buscando (prueba de títeres) – JDS

Cuestiones relacionadas