RSSポーリング:プラグインの拡張ポイント(フィードフォームの出力先、インポート時のフィードID、更新パスのフック)

RSS Polling 用の小さな companion プラグイン(discourse-rss-onebox)を構築しました。インポートされたブログ記事は記事の onebox としてレンダリングされ、オプションとしてフィードの概要、YouTube の説明、タイトルフォーマットをサポートしています。3 つのギャップにより、ドキュメント化されたフックを使用する代わりに、コアメソッドをラップする必要がありました。

  1. フィードフォームにプラグインアウトレットがない。 rss-polling-feed-form.gjs#L287-L351 には PluginOutlet が存在せず、更新コントラクトは固定の属性セットのみを受け入れます(update.rb#L9-L14)。プラグインはフィードごとのオプションを追加できないため、私たちのプラグインには別の管理ページが必要でした。アウトレットと、追加フィールドを永続化する方法(例えばフィードのカスタムフィールド)があれば、これをカバーできます。

  2. フィード ID がインポートに到達しない。 ポールジョブは rss_feed_id を知っていますが、TopicEmbed.import(poll_feed.rb#L110)や topic_embed_import_create_args モディファイア(topic_embed.rb#L108)はこれを決して受け取りません。私たちはポールジョブをラップしてこれをキャプチャしています。オプションとしてこれをパスできれば、プラグインはフィードごとにアクションを取れます。

  3. 更新パスにフックがない。 フィードアイテムの内容が変更されると、TopicEmbed.import はフィードの内容で投稿を改訂します(topic_embed.rb#L147-L152)。これにより、create モディファイアが何をしたかをバイパスします。ブロガーが投稿を編集すると、プラグインによって整形されたトピックが静かにフィードテキストに戻ってしまいます。topic_embed_import_create_args を模した更新変更用のモディファイアがあれば、これを解消できます。

2 と 3 のワークアラウンドは、TopicEmbed.import とポールジョブを prepend することです。これは脆いものです:main はその後 TopicEmbed.import に truncate: キーワードを追加しており、2026.7 のシグネチャを模したラッパーを壊します。私たちはそれをパスするためにリリースを出す必要がありました。ドキュメント化されたフックがあれば、その種の破壊を避けることができます。