Нужна помощь с настройкой функции «Включить плагин»

Я работаю над плагином для Markdown и столкнулся с проблемой при добавлении настройки сайта, позволяющей отключить эту функцию. Я написал плагин, следуя структуре Discourse Footnote, где есть настройка для отключения этого плагина. Я установил плагин «footnote», убедился, что его можно отключить через интерфейс, и что соответствующий тест проходит успешно. Однако отключение моего плагина через настройки сайта не даёт никакого эффекта, и юнит-тест подтверждает это своим провалом.

Не уверен, что я делаю иначе по сравнению с плагином «footnote». Возможно, я совершенно неправильно использую opts.features или делаю неверные предположения, потому что, как и почти везде, я просто заменил «footnotes» на «ruby». Любая помощь будет очень кстати.

Репозиторий находится здесь: GitHub - seanblue/discourse-ruby: Adds ruby markdown support to Discourse · GitHub


Ключевые аспекты, связанные с настройкой сайта, включают:

А вот тест, который постоянно падает (ещё не добавлен в репозиторий):

  it "can be disabled" do
    SiteSetting.enable_markdown_ruby = false

    markdown = <<~MD
      Here is some text: {漢字|かん|じ}.
    MD

    html = <<~HTML
      <p>Here is some text: {漢字|かん|じ}.</p>
    HTML

    cooked = PrettyText.cook markdown.strip
    expect(cooked).to eq(html.strip)
  end

Неудивительно, что ошибка говорит о том, что обработанный текст получается так, будто разметка всё ещё применяется.

expected: "<p>Here is some text: {漢字|かん|じ}.</p>"
     got: "<p>Here is some text: <ruby>漢<rt>かん</rt>字<rt>じ</rt></ruby>.</p>"

Обычно в таких случаях я начинаю выводить отладочную информацию.

Вы пробовали добавить несколько внутренних операторов console.log для вывода значений переменных? Это может пролить свет на ситуацию. Я считаю, что настройки действительно передаются в движок Markdown, и ваш тест выглядит корректным.

Давно я не занимался отладкой с помощью console.log. Попробую.

Я очень даже puts debugger — это механизм, к которому я чаще всего прибегаю в качестве запасного варианта.

Я разобрался с проблемой. Как я и подозревал, дело было в том, как я использовал opts.features. Изучив исходный код Markdown, я понял, что название функции определяется именем файла. Мой файл назывался markdown-ruby.js.es6, поэтому имя функции неявно стало markdown-ruby, хотя в коде я присваивал функцию ruby. Переименование файла в ruby.js.es6 решило проблему.

Мне всё ещё не совсем понятно, представляет ли opts.features, которое я изменяю, все функции или только подмножество функций Markdown. Если это все функции, то ruby кажется немного слишком коротким/неконкретным, и, возможно, я переименую файл и функцию в markdown-ruby, просто на всякий случай.