如何将所有shopify过滤器添加到标准液体中

时间:2016-02-09 08:30:09

标签: ruby-on-rails ruby liquid

我们在网络应用中使用液体。我注意到Shopify已经实现了一些有用的过滤器,这些过滤器默认不包含在液体宝石中。例如url_param_escape

为了测试它我做了这个:

$ IRB

  

要求'液体'   Liquid :: Template.parse(' {{"&" | url_param_escape}}')。呈现    => " &安培; "

显然,默认情况下不包含这些过滤器。他们可以从某个地方获得吗?如果是这样,我在哪里以及如何将它们添加到解析器?否则是一个接一个地实现它们的情况,还是它们都来自同一个模块或什么东西?

1 个答案:

答案 0 :(得分:1)

你可以/必须自己写。它们很容易创建。以下是url_param_escape过滤器的示例实现:

'use strict';

var hbs = require('handlebars');
var fs  = require('fs');

var dir = __dirname + '/your_api_dir';

var files = fs.readdirSync(dir);

files.forEach((fileName) => {
  var raw = fs.readFileSync(dir + '/' + fileName, 'utf8');
  hbs.registerPartial(file, raw);
});

var index = fs.readFileSync(dir + '/index.yaml');

var out = hbs.compile(index.toString());

然后你需要注册这个过滤器,以便Liquid知道使用它。我通常在config.after_initialize中的application.rb中执行此操作,但如果你有很多这样的话,它可能会有更好的地方。这是一个例子:

module MyApp
  module Liquid
    module Filters
      module UrlParamFilter
        def url_param_escape(thing_to_escape)
          CGI.escape(thing_to_escape)
        end
      end
    end
  end
end