Мне нужна ERB (система шаблонов Ruby) для шаблонов не-HTML файлов.
(Вместо этого я хочу использовать его для исходных файлов, таких как .java,.cs,...)
Как выполнить "выполнить" шаблоны Ruby из командной строки?
Мне нужна ERB (система шаблонов Ruby) для шаблонов не-HTML файлов.
(Вместо этого я хочу использовать его для исходных файлов, таких как .java,.cs,...)
Как выполнить "выполнить" шаблоны Ruby из командной строки?
У вас должно быть все, что вам нужно, в вашем каталоге ruby /bin. В моей (WinXP, Ruby 1.8.6) системе есть 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 "%"
поэтому erb your_erb_file.erb
должен записать результат в STDOUT.
(EDIT: у окон есть erb.bat и просто "erb". Бат файл - это всего лишь оболочка для erb, которая, как я полагаю, должна заставить одну и ту же команду работать почти одинаково на любой ОС)
См. обсуждение prag prog book (начинается с половины страницы вниз).
Отметим также, что Джек Херрингтон написал целую книгу о генерации кода, которая использует Ruby/ERB.
Напишите ruby script, который делает это. Документация API находится здесь: http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/
Например:
template = ERB.new File.read("path/to/template.erb"), nil, "%"
template.result(binding)
(Если привязка является связыванием с @vars, что требуется шаблону.)
Другой вариант - использовать ruby -e, так как ERB itlef настолько прост.
Что-то вроде:
ruby -rerb -e "puts ERB.new(File.read(<file name here>)).result"
Однако я предполагаю, что у вас есть контекст, который вы хотите отобразить в шаблоне. Как вы ожидаете получить этот контекст? Например, проверьте:
ruby -rerb -e "hello = 'hello'; puts ERB.new('<%= hello %> world').result(binding)"
который выведет "hello world", используя верхний уровень, где вы определили переменную hello
как привязку.
Если вы можете переключить ERB на Erubis, решение проблемы будет таким же простым, как:
require 'erubis'
template = File.read("sample_file.erb")
template = Erubis::Eruby.new(template)
template.result(:your_variable => "sample")
Нашел этот вопрос, пытаясь проверить мои шаблоны-куколки.
Заканчивается этим решением:
foo.erb
создайте файл foo.vars.erb
Поместите все ваши переменные шаблона в этот новый файл, например:
<% @my_param="foo bar" %>
<% @another_param=123 %>
или (эквивалент):
<%
@my_param="foo bar"
@another_param=123
%>
В командной строке выполните следующее:
cat foo.vars.erb foo.erb | erb
Теперь ваш полностью обработанный шаблон должен быть напечатан на std-out. Оттуда вы проверяете результат вручную, или можете взять diff (или другие инструменты), чтобы сравнить его с предварительно обработанным выходом.
Это хорошая базовая статья - http://rrn.dk/rubys-erb-templating-system И еще один - http://www.stuartellis.eu/articles/erb/
Я попытался прокомментировать это, но ссылка ссылки недоступна.
Я использую это:
template = ERB.new File.new("path/to/template.erb").read, nil, "%"
template.result(binding)
Из сообщения выше: и я обнаружил, что я думаю, что это может быть проблемой:
Я создаю файлы DOS BATCH, например:
%JAVA_HOME%\bin\jar -xvf <%=inputfile%>...
И я нашел странную вещь - я получаю это, когда я запускаю код выше:
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
Я попробовал следующее и обошел свою конкретную проблему - не уверен, что это правильный ответ для всех...
template = ERB.new File.new("path/to/template.erb").read
template.result(binding)