RSS Polling 用の小さな companion プラグイン(discourse-rss-onebox)を構築しました。インポートされたブログ記事は記事の onebox としてレンダリングされ、オプションとしてフィードの概要、YouTube の説明、タイトルフォーマットをサポートしています。3 つのギャップにより、ドキュメント化されたフックを使用する代わりに、コアメソッドをラップする必要がありました。
-
フィードフォームにプラグインアウトレットがない。 rss-polling-feed-form.gjs#L287-L351 には
PluginOutletが存在せず、更新コントラクトは固定の属性セットのみを受け入れます(update.rb#L9-L14)。プラグインはフィードごとのオプションを追加できないため、私たちのプラグインには別の管理ページが必要でした。アウトレットと、追加フィールドを永続化する方法(例えばフィードのカスタムフィールド)があれば、これをカバーできます。 -
フィード ID がインポートに到達しない。 ポールジョブは
rss_feed_idを知っていますが、TopicEmbed.import(poll_feed.rb#L110)やtopic_embed_import_create_argsモディファイア(topic_embed.rb#L108)はこれを決して受け取りません。私たちはポールジョブをラップしてこれをキャプチャしています。オプションとしてこれをパスできれば、プラグインはフィードごとにアクションを取れます。 -
更新パスにフックがない。 フィードアイテムの内容が変更されると、
TopicEmbed.importはフィードの内容で投稿を改訂します(topic_embed.rb#L147-L152)。これにより、create モディファイアが何をしたかをバイパスします。ブロガーが投稿を編集すると、プラグインによって整形されたトピックが静かにフィードテキストに戻ってしまいます。topic_embed_import_create_argsを模した更新変更用のモディファイアがあれば、これを解消できます。
2 と 3 のワークアラウンドは、TopicEmbed.import とポールジョブを prepend することです。これは脆いものです:main はその後 TopicEmbed.import に truncate: キーワードを追加しており、2026.7 のシグネチャを模したラッパーを壊します。私たちはそれをパスするためにリリースを出す必要がありました。ドキュメント化されたフックがあれば、その種の破壊を避けることができます。