этот код выглядит очень знакомым :) Я предлагаю вам посмотреть тестовый файл Rspecs для проверки ваших проблем: https://github.com/keithmifsud/jekyll-target-blank
Я постараюсь ответить на ваши вопросы, извините, я сам не смог проверить их на момент написания.
Как искать только заголовок сообщения в основном тексте копии сообщения, а не метатеги перед сообщением или оглавлением (которое также создается перед текстом основного сообщения)? Я не могу заставить это работать с Нокигири, хотя это, кажется, инструмент выбора здесь.
Ваши требования здесь:
1) Игнорировать содержимое вне тегов <body></body>
.
Кажется, это уже реализовано в методе process_html()
. Этот метод устанавливает единственный процесс body_content
, и он должен работать как есть. У вас есть тесты для этого? Как вы отлаживаете это? Такое же разбиение строк работает в моем плагине. То есть обрабатывается только содержимое внутри тела.
2) Игнорировать содержимое в оглавлении (TOC).
Я предлагаю вам расширить метод process_html()
, разделив переменную body_content
. Найдите содержимое между открывающим и закрывающим тегами вашего оглавления (по идентификатору, классу CSS и т. Д.) И исключите его, затем добавьте обратно на свою позицию до или после строки process_words
.
3) Использовать ли плагин Nokigiri?
Этот плагин отлично подходит для разбора HTML. Я думаю, что вы разбираете строки, а затем создаете HTML. Так что ванильного Ruby и URI-плагина должно хватить. Вы все еще можете использовать его, если хотите, но это не будет быстрее, чем расщепление строк в ruby.
Если URL-адрес поста не указан в post.data ['url'], где он находится?
Я думаю, вы должны иметь метод, чтобы получить все заголовки всех сообщений, а затем сопоставить слова со списком. Вы можете получить всю коллекцию постов из самого документа doc.site.posts
и каждый пост вернуть название. Метод process_words()
может проверять каждую работу, чтобы увидеть, соответствует ли она элементу из массива. Но что, если заголовок состоит из более чем одного слова?
Кроме того, есть ли более эффективный и чистый способ сделать это?
Пока все хорошо. Я начну с исправления проблем, а затем рефакторинг для стандартов скорости и кодирования.
Опять же, я предлагаю вам использовать тестирование, чтобы помочь вам в этом.
Дайте мне знать, если я могу помочь больше:)