Плагин Jekyll не выводит переменную - PullRequest
0 голосов
/ 28 апреля 2018

Правильно, поэтому я пытаюсь сделать что-то невероятно простое: просмотреть некоторые файлы и распечатать их содержимое. Это мой _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", вывод будет правильным. Само собой разумеется, я очень незнаком с Руби.

1 Ответ

0 голосов
/ 28 апреля 2018

Проблема здесь заключается в том, что Dir.glob при получении блока (как вы это сделали) будет вызывать блок один раз для каждого соответствующего имени файла, но затем возвращает nil.

Это означает, что ваш render метод на самом деле ничего не возвращает.

Одним из решений является вызов glob без блока. Затем он вернет список совпадающих имен файлов, и вы сможете сопоставить его с содержимым файлов.

Например, чтобы вернуть объединенное содержимое всех подходящих файлов:

def render(context)
  Dir.glob("somefolder/*.someextension").map do |filename|
    File.read(filename)
  end.join("\n")
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...