需要帮助实现“启用插件”设置功能

我正在开发一个 Markdown 插件,但在添加一个站点设置以允许禁用该功能时遇到了问题。我是按照 Discourse Footnote 的结构编写插件的,该插件包含一个允许禁用的设置。我安装了脚注插件,并验证了它可以从 UI 中禁用,且其对应的测试通过。然而,从站点设置禁用我的插件没有任何效果,单元测试也证实了这一点(测试失败)。

我不确定与脚注插件相比,我哪里做得不同。也许我对 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

不出所料,失败信息显示它生成的 HTML 文本仍然应用了 Markdown 转换。

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 调试器,这是我大多数时候会回退使用的机制。

我已经找到了问题所在。正如我所怀疑的,问题确实出在我使用 opts.features 的方式上。在查看了 核心 Markdown 代码 后,我意识到功能名称是基于文件名确定的。我的文件名为 markdown-ruby.js.es6,因此功能名称隐式为 markdown-ruby,尽管我在代码中分配的功能名称是 ruby。将文件重命名为 ruby.js.es6 后,问题得以解决。

不过,我仍然不太清楚我所修改的 opts.features 代表的是所有功能,还是仅指 Markdown 子集的功能。如果代表所有功能,ruby 这个名称显得有点太短或太模糊,为了保险起见,我可能会将文件名和功能名都改为 markdown-ruby