1

我有一个通过 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。

4

1 回答 1

2

如果您也将内容转储为 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

Note that the pipe character appears in the YAML so that newlines in the content string are preserved.

于 2009-02-11T21:47:27.847 回答