2009-02-11 46 views
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。

回答

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 

請注意,管道字符出現在YAML so that newlines in the content string are preserved中。

+0

我喜歡這種方法;比erb評論更適合人類觀看。我的一些內容可能已經包含yaml,但如果我轉義任何文檔分隔符,我認爲我很安全? \ --- – slothbear 2009-02-13 17:13:35

相關問題