Как включить метаданные в файл шаблона?
У меня есть система, которая фильтрует файлы шаблона через erb. Используя соглашение по конфигурации, выходные файлы создаются в файловой иерархии, которая отражает входные файлы. Многие из файлов имеют одинаковые имена, и я смог использовать каталоги, чтобы различать их.
Этот план работал, пока мне не нужно было связать дополнительную информацию с каждым файлом. Поэтому я создал файл YAML в каждом каталоге с метаданными. Теперь у меня есть соглашение и конфигурация. Тьфу.
Затем я изучил Webby и то, как он включает раздел метаданных YAML в верхней части каждого файла шаблона. Они выглядят так:
---
title: Baxter the Dog
filter: textile
---
All the best little blogs use Webby.
Если бы я мог реализовать такой заголовок, я мог бы отказаться от своей иерархии и отдельных файлов YAML. Реализация Webby очень универсальна, она реализует новый класс MetaFile, который отделяет заголовок от "реального текста", но кажется более сложным, чем мне нужно.
Добавление метаданных в комментарий erb кажется хорошим - он будет автоматически игнорироваться erb, но я не уверен, как получить доступ к данным комментария.
<%#
title: Baxter the Dog
%>
Есть ли способ получить доступ к комментариям erb? Или, может быть, другой подход? Многие из моих шаблонов делают кучу вещей из erb, но я могу запустить erb в отдельном шаге, если это облегчит все остальное.
1 ответ
Как насчет того, чтобы вы также сбросили свой контент как YAML. Предположительно, метаданные - это просто хэш, выгруженный в YAML. Вы можете просто добавить содержимое в виде строки во второй документ YAML в том же файле:
---
title: Baxter the Dog
filter: textile
--- |
Content line 1
Content line 2
Content line 3
Демпинг так же прост, как:-
File.open('file.txt', 'w') do |output|
YAML.dump(metadata, output)
YAML.dump(content, output)
end
Загрузка так же просто, как:-
File.open('file.txt') do |input|
stream = YAML.load_stream(input)
metadata, content = stream.documents
end
Обратите внимание, что символ канала появляется в YAML, поэтому новые строки в строке содержимого сохраняются.