플러그인 활성화 설정 기능이 작동하지 않아서 도움 필요

마크다운 플러그인을 개발 중인데, 해당 기능을 비활성화할 수 있도록 사이트 설정을 추가하는 데 어려움을 겪고 있습니다. 플러그인은 Discourse Footnote 구조를 참고하여 작성했으며, 이 플러그인에는 해당 기능을 비활성화할 수 있는 설정이 있습니다. footnotes 플러그인을 설치해 보니 UI에서 비활성화할 수 있고, 관련 테스트도 통과하는 것을 확인했습니다. 하지만 제 플러그인을 사이트 설정에서 비활성화해도 아무런 효과가 없으며, 단위 테스트도 실패하여 이를 확인했습니다.

footnotes 플러그인과 제가 다르게 무엇을 하고 있는지 모르겠습니다. 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 문을 추가해 보셨나요? 여기에서 도움이 될 수 있습니다. 설정이 마크다운 엔진으로 전송된다고 생각하며, 테스트는 적절해 보입니다.

오래전에 콘솔 로그로 디버깅을 했던 적이 있네요. 한번 해볼게요.

저는 puts 디버거를 아주 많이 사용하는 편이며, 대부분의 경우 가장 자주 되돌아가는 방법이기도 합니다.

문제를 파악했습니다. 예상대로 opts.features를 사용하는 방식에 문제가 있었습니다. 코어 마크다운 코드를 살펴본 결과, 기능 이름이 파일 이름에 기반하여 결정된다는 사실을 깨달았습니다. 제 파일 이름이 markdown-ruby.js.es6였기 때문에, 코드에서 ruby라는 기능을 지정하고 있었음에도 불구하고 기능 이름은 암묵적으로 markdown-ruby로 처리되고 있었습니다. 파일 이름을 ruby.js.es6으로 변경하니 문제가 해결되었습니다.

다만, 제가 수정하고 있는 opts.features가 모든 기능을 나타내는 것인지, 아니면 마크다운 기능의 하위 집합만을 나타내는 것인지 여전히 명확하지 않습니다. 만약 모든 기능을 나타내는 것이라면, ruby라는 이름은 다소 짧고 모호하게 느껴져서 안전을 위해 파일 이름과 기능 이름을 markdown-ruby로 변경하는 것을 고려해 볼 것입니다.