From 3da4f5eac352259641eeb83a750656fba776d92c Mon Sep 17 00:00:00 2001 From: Krzysztof Kotlarek Date: Tue, 11 Mar 2025 13:24:27 +1100 Subject: [PATCH] DEV: fix Zeitwerk issue with SpamScanner class (#1183) When spam scanner is enabled and code is reloaded, developer experience this error: ``` NameError at /posts =================== uninitialized constant DiscourseAi::AiModeration::EntryPoint::SpamScanner > To access an interactive console with this error, point your browser to: /__better_errors plugins/discourse-ai/lib/ai_moderation/entry_point.rb, line 7 ``` It is because when we call `SpamScanner` it is searched within parent `DiscourseAi::AiModeration::EntryPoint` namespace. We can help a bit Zeitwerk by calling SpamScanner more explicitly. --- lib/ai_moderation/entry_point.rb | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/ai_moderation/entry_point.rb b/lib/ai_moderation/entry_point.rb index 68b7f407..122d6f3f 100644 --- a/lib/ai_moderation/entry_point.rb +++ b/lib/ai_moderation/entry_point.rb @@ -4,12 +4,18 @@ module DiscourseAi module AiModeration class EntryPoint def inject_into(plugin) - plugin.on(:post_created) { |post| SpamScanner.new_post(post) } - plugin.on(:post_edited) { |post| SpamScanner.edited_post(post) } - plugin.on(:post_process_cooked) { |_doc, post| SpamScanner.after_cooked_post(post) } + plugin.on(:post_created) { |post| ::DiscourseAi::AiModeration::SpamScanner.new_post(post) } + plugin.on(:post_edited) do |post| + ::DiscourseAi::AiModeration::SpamScanner.edited_post(post) + end + plugin.on(:post_process_cooked) do |_doc, post| + ::DiscourseAi::AiModeration::SpamScanner.after_cooked_post(post) + end plugin.on(:site_setting_changed) do |name, _old_value, new_value| - SpamScanner.ensure_flagging_user! if name == :ai_spam_detection_enabled && new_value + if name == :ai_spam_detection_enabled && new_value + ::DiscourseAi::AiModeration::SpamScanner.ensure_flagging_user! + end end custom_filter = [