39 votes

Comment exécuter des fichiers de modèle Ruby (ERB) sans serveur Web à partir de la ligne de commande?

J'ai besoin de l' ERB (système de templates de Ruby) pour la modélisation de fichiers non HTML.
(Au lieu de cela, je veux l'utiliser pour des fichiers source tels que .java, .cs, ...)

Comment "exécuter" les modèles Ruby à partir de la ligne de commande?

25voto

Mike Woodhouse Points 27748

Vous devriez avoir tout ce dont vous avez besoin dans votre ruby/bin. Sur mon (WinXP, Ruby 1.8.6) système, j'ai des 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 "%"

donc, erb your_erb_file.erb doit écrire le résultat sur la sortie standard STDOUT.

(EDIT: windows a erb.chauve-souris et tout simplement "erb". L' .fichier bat est juste un wrapper pour erb, qui je pense devrait faire la même commande de travail à peu près la même sur n'importe quel OS)

Voir le prag prog livre de la discussion (qui commence environ à mi-chemin en bas de la page).

Notez également que Jack Herrington a écrit tout un livre sur la génération de code qui utilise Ruby/ERB.

24voto

Sam Points 876

Ecrivez un script ruby qui le fait. La documentation de l'API est ici: http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/

Par exemple:

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

(Où liaison est une liaison avec les @vars dont le modèle a besoin.)

14voto

Yehuda Katz Points 18277

Une autre option consisterait à utiliser ruby -e, car ERB itslef est très simple.

Quelque chose comme:

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

Cependant, je suppose que vous souhaitez rendre le modèle dans un contexte. Comment comptez-vous obtenir ce contexte? À titre d'exemple, consultez:

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

qui affichera "hello world", en utilisant le niveau supérieur, où vous avez défini la variable hello , en tant que liaison.

12voto

morgoth Points 646

Si vous pouvez passer d'ERB à Erubis, la résolution de votre problème est aussi simple que:

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

1voto

Ninad Points 775

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X