template engine ruby code-generation template-engine erb

engine - ¿Cómo ejecuto los archivos de plantilla de ruby(ERB) sin un servidor web desde la línea de comandos?



erb ruby syntax (7)

Necesito ERB (sistema de plantillas de Ruby) para plantillas de archivos que no sean HTML.
(En cambio, quiero usarlo para archivos fuente como .java, .cs, ...)

¿Cómo puedo "ejecutar" las plantillas de Ruby desde la línea de comandos?


Encontré esta pregunta al intentar probar mis plantillas de Puppet.

Terminado con esta solución:

  1. A lo largo de tu foo.erb crea un archivo foo.vars.erb
  2. Coloque 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 ejecuta esto:

    cat foo.vars.erb foo.erb | erb

Su plantilla completamente renderizada ahora debe imprimirse para que sea estándar. Desde allí, verifica la salida a mano, o puede tomar diff (u otras herramientas) para compararla con una salida renderizada previamente.


Escribe un guión 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 el enlace es un enlace con los @vars que la plantilla necesita).



Otra opción sería usar ruby ​​-e, ya que ERB itslef es tan simple.

Algo como:

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

Sin embargo, supongo que tiene un contexto en el que desea representar la plantilla. ¿Cómo espera obtener ese contexto? Como ejemplo, mira:

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

que imprimirá "hello world", utilizando el nivel superior, donde definió la variable hello , como el enlace.


Si puede cambiar ERB a Erubis, su solució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")


Traté de 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)

De la publicación anterior: y encontré lo que creo que podría ser un problema:

Estoy creando archivos DOS BATCH como:

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

Y encontré un problema raro: lo entiendo cuando ejecuto 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

Intenté lo siguiente y resolví mi problema particular: no estoy seguro de si esta es la respuesta correcta para todos ...

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


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 "%"

entonces erb your_erb_file.erb debe escribir el resultado en STDOUT.

(EDITAR: windows tiene erb.bat y simplemente "erb". El archivo .bat es solo un contenedor para erb, lo que supongo que debería hacer que el mismo comando funcione de manera similar en cualquier sistema operativo)

Vea la discusión del libro progresivo prag (comienza aproximadamente a la mitad de la página).

Tenga en cuenta también que Jack Herrington escribió un libro completo sobre la generación de código que utiliza Ruby / ERB.