Как включить метаданные в файл шаблона?

У меня есть система, которая фильтрует файлы шаблонов через 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 в отдельном шаге, если это упростит все остальное.


person slothbear    schedule 11.02.2009    source источник


Ответы (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 , так что новые строки в строке содержимого сохраняются .

person James Mead    schedule 11.02.2009
comment
Мне нравится этот подход; приятнее для человеческого восприятия, чем комментарий erb. Некоторый мой контент может уже включать yaml, но я думаю, что буду в безопасности, если буду избегать каких-либо разделителей документов? \--- - person slothbear; 13.02.2009