mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 07:53:49 +08:00
DEV: Make discourse_narrative_bot
use Rails autoload (#26044)
Why this change? Instead of manually loading files, we should just structure the plugin so that it relies on Rails autoload strategy and avoid all the manual `require_relative`s. What does this change do? 1. Structure the plugin to use Rails autoloading convention 2. Remove onceff jobs that were added 5-6 years ago. There is no need to carry these jobs anymore after such a long time. 3. Move setting of `SiteSetting.discourse_narrative_bot_enabled` to `false` in the test environment from core into the plugin.
This commit is contained in:

committed by
GitHub

parent
6b46b9ab78
commit
3491642f98
@ -9,22 +9,26 @@
|
||||
enabled_site_setting :discourse_narrative_bot_enabled
|
||||
hide_plugin
|
||||
|
||||
if Rails.env == "development"
|
||||
# workaround, teach reloader to reload jobs
|
||||
# if we do not do this then
|
||||
#
|
||||
# 1. on reload rails goes and undefines Jobs::Base
|
||||
# 2. as a side effect this undefines Jobs::BotInput
|
||||
# 3. we have a post_edited hook that queues a job for bot input
|
||||
# 4. if you are not running sidekiq in dev every time you save a post it will trigger it
|
||||
# 5. but the constant can not be autoloaded
|
||||
Rails.configuration.autoload_paths << File.expand_path("../autoload/jobs", __FILE__)
|
||||
end
|
||||
|
||||
require_relative "lib/discourse_narrative_bot/welcome_post_type_site_setting"
|
||||
register_asset "stylesheets/discourse-narrative-bot.scss"
|
||||
|
||||
module ::DiscourseNarrativeBot
|
||||
PLUGIN_NAME = "discourse-narrative-bot".freeze
|
||||
BOT_USER_ID = -2
|
||||
end
|
||||
|
||||
require_relative "lib/discourse_narrative_bot/engine"
|
||||
|
||||
after_initialize do
|
||||
if Rails.env.test?
|
||||
::SiteSetting.defaults.tap do |s|
|
||||
# disable plugins
|
||||
if ENV["LOAD_PLUGINS"] == "1"
|
||||
s.set_regardless_of_locale(:discourse_narrative_bot_enabled, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
SeedFu.fixture_paths << Rails
|
||||
.root
|
||||
.join("plugins", "discourse-narrative-bot", "db", "fixtures")
|
||||
@ -32,24 +36,6 @@ after_initialize do
|
||||
|
||||
Mime::Type.register "image/svg+xml", :svg
|
||||
|
||||
require_relative "autoload/jobs/regular/bot_input"
|
||||
require_relative "autoload/jobs/regular/narrative_timeout"
|
||||
require_relative "autoload/jobs/regular/narrative_init"
|
||||
require_relative "autoload/jobs/regular/send_default_welcome_message"
|
||||
require_relative "autoload/jobs/onceoff/discourse_narrative_bot/grant_badges"
|
||||
require_relative "autoload/jobs/onceoff/discourse_narrative_bot/remap_old_bot_images"
|
||||
require_relative "lib/discourse_narrative_bot/actions"
|
||||
require_relative "lib/discourse_narrative_bot/base"
|
||||
require_relative "lib/discourse_narrative_bot/new_user_narrative"
|
||||
require_relative "lib/discourse_narrative_bot/advanced_user_narrative"
|
||||
require_relative "lib/discourse_narrative_bot/track_selector"
|
||||
require_relative "lib/discourse_narrative_bot/certificate_generator"
|
||||
require_relative "lib/discourse_narrative_bot/dice"
|
||||
require_relative "lib/discourse_narrative_bot/quote_generator"
|
||||
require_relative "lib/discourse_narrative_bot/magic_8_ball"
|
||||
require_relative "lib/discourse_narrative_bot/welcome_post_type_site_setting"
|
||||
require_relative "lib/discourse_narrative_bot/post_guardian_extension"
|
||||
|
||||
RailsMultisite::ConnectionManagement.safe_each_connection do
|
||||
if SiteSetting.discourse_narrative_bot_enabled
|
||||
# Disable welcome message because that is what the bot is supposed to replace.
|
||||
@ -63,79 +49,6 @@ after_initialize do
|
||||
end
|
||||
end
|
||||
|
||||
require_dependency "plugin_store"
|
||||
|
||||
module ::DiscourseNarrativeBot
|
||||
PLUGIN_NAME = "discourse-narrative-bot".freeze
|
||||
BOT_USER_ID = -2
|
||||
|
||||
class Engine < ::Rails::Engine
|
||||
engine_name PLUGIN_NAME
|
||||
isolate_namespace DiscourseNarrativeBot
|
||||
end
|
||||
|
||||
class Store
|
||||
def self.set(key, value)
|
||||
::PluginStore.set(PLUGIN_NAME, key, value)
|
||||
end
|
||||
|
||||
def self.get(key)
|
||||
::PluginStore.get(PLUGIN_NAME, key)
|
||||
end
|
||||
|
||||
def self.remove(key)
|
||||
::PluginStore.remove(PLUGIN_NAME, key)
|
||||
end
|
||||
end
|
||||
|
||||
class CertificatesController < ::ApplicationController
|
||||
layout false
|
||||
skip_before_action :check_xhr
|
||||
requires_login
|
||||
|
||||
def generate
|
||||
immutable_for(24.hours)
|
||||
|
||||
%i[date user_id].each do |key|
|
||||
unless params[key]&.present?
|
||||
raise Discourse::InvalidParameters.new("#{key} must be present")
|
||||
end
|
||||
end
|
||||
|
||||
if params[:user_id].to_i != current_user.id
|
||||
rate_limiter = RateLimiter.new(current_user, "svg_certificate", 3, 1.minute)
|
||||
else
|
||||
rate_limiter = RateLimiter.new(current_user, "svg_certificate_self", 30, 10.minutes)
|
||||
end
|
||||
rate_limiter.performed! unless current_user.staff?
|
||||
|
||||
user = User.find_by(id: params[:user_id])
|
||||
raise Discourse::NotFound if user.blank?
|
||||
|
||||
hijack do
|
||||
generator = CertificateGenerator.new(user, params[:date], avatar_url(user))
|
||||
|
||||
svg =
|
||||
params[:type] == "advanced" ? generator.advanced_user_track : generator.new_user_track
|
||||
|
||||
respond_to { |format| format.svg { render inline: svg } }
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def avatar_url(user)
|
||||
UrlHelper.absolute(Discourse.base_path + user.avatar_template.gsub("{size}", "250"))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
DiscourseNarrativeBot::Engine.routes.draw do
|
||||
get "/certificate" => "certificates#generate", :format => :svg
|
||||
end
|
||||
|
||||
Discourse::Application.routes.append { mount ::DiscourseNarrativeBot::Engine, at: "/discobot" }
|
||||
|
||||
self.add_model_callback(User, :after_destroy) { DiscourseNarrativeBot::Store.remove(self.id) }
|
||||
|
||||
self.on(:user_created) do |user|
|
||||
|
Reference in New Issue
Block a user