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にダンプされたハッシュです。同じファイル内の2番目の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に表示されることに注意してください。

于 2009-02-11T21:47:27.847 に答える