在Middleman

时间:2018-01-22 21:34:16

标签: ruby yaml middleman

我在yaml文件中有一些数据。我想从这些数据中计算一些值,然后我将在从模板构建的页面中使用这些值。到目前为止,我一直在帮助器中进行这种计算,但它涉及大量的重复(例如,对于一个页面进行多次相同的计算)并且实际上是对助手的误用。

我正在寻找另一种更好的方法。我想要做的是在构建时处理数据文件并进行一次计算,以便在构建页面时可以读取结果(根据需要多次)。

在我的config.rb文件中,我设想了类似的内容:

#call some code here to process data.products here, either overwriting the products.yml or creating a new file such as products_cleaned.yml

#this code already exists...
data.products.each do |p|
    proxy product.url, "/product.html", locals: { product: p}, ignore: true
end

最好的方法是什么?我是否需要编写扩展名,或者是否有其他方法可以调用某些ruby来编写我的yaml文件?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我需要从外部数据生成yaml,我所做的是有一个单独的脚本,可以为我生成yaml数据文件。然后我会使用类似makerake的内容来对这个脚本和middleman build的两次调用进行排序。然后我从config.rb文件中看到了我生成的yaml。

如果您不想添加构建步骤,那么您可以做的另一件事是处理data.products文件,并自己创建ruby哈希结构。如果您正在生成yaml,那么您可以使用ruby yaml libaries将其解析为哈希值(http://ruby-doc.org/stdlib-2.5.0/libdoc/psych/rdoc/Psych.html)。然后,您可以将这些传递给代理呼叫。像

这样的东西
#call some code here to process data.products here
my_products = Psych.load(process_products_to_yaml_string(data.products))

#this code already exists...
my_products.each do |p|
    proxy p.url, "/product.html", locals: { product: p}, ignore: true
end