Jekyll插件不会打印变量

时间:2018-04-28 08:50:17

标签: ruby

是的,所以我正在尝试做一些简单的事情,这是通过一些文件并打印出内容。这是我的_plugins/test.rb文件:

module Jekyll
  class TestPlugin < Liquid::Tag
    def render(context)
      Dir.glob("somefolder/*.someextension") do |my_file|
          file = File.open(my_file)
          contents = file.read
          # print contents
      end
    end
  end
end

Liquid::Template.register_tag('testplugin', Jekyll::TestPlugin)

现在考虑env,一个简单的puts contents会将正确的内容输出到控制台。但是,我希望这只是在通过{% testplugin %}调用时吐出内容。我尝试了以下组合:

"contents"
#{contents}
#{@contents}
print contents
print "contents"
print #{contents}
print #{@contents}

通过{% testplugin %}调用时,没有任何内容输出任何内容。当我将Dir.glob内容替换为"Hello there"之类的内容时,输出将是正确的。毋庸置疑,我对Ruby非常不熟悉。

1 个答案:

答案 0 :(得分:1)

这里的问题是Dir.glob给出一个区块(正如您已完成的那样)call the block once for each matching filename but then returns nil

这意味着您的render方法实际上并未返回任何内容。

一种解决方案是在没有阻止的情况下调用glob。然后它将返回匹配文件名的列表,您可以将其映射到文件的内容。

例如,返回所有匹配文件的组合内容:

def render(context)
  Dir.glob("somefolder/*.someextension").map do |filename|
    File.read(filename)
  end.join("\n")
end