mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Reduce repeated code in discourse_plugin_registry (#9705)
Use a helper method to simplify creating a new register. Previously this would require creating lots of different methods manually, and adding every register to the clear/reset functions
This commit is contained in:
@@ -5,100 +5,45 @@
|
|||||||
#
|
#
|
||||||
class DiscoursePluginRegistry
|
class DiscoursePluginRegistry
|
||||||
|
|
||||||
class << self
|
# Shortcut to create new register in the plugin registry
|
||||||
attr_writer :javascripts
|
# - Register is created in a class variable using the specified name/type
|
||||||
attr_writer :auth_providers
|
# - Defines singleton method to access the register
|
||||||
attr_writer :service_workers
|
# - Defines instance method as a shortcut to the singleton method
|
||||||
attr_writer :admin_javascripts
|
# - Automatically deletes the register on ::clear!
|
||||||
attr_writer :stylesheets
|
def self.define_register(register_name, type)
|
||||||
attr_writer :mobile_stylesheets
|
@@register_names ||= Set.new
|
||||||
attr_writer :desktop_stylesheets
|
@@register_names << register_name
|
||||||
attr_writer :sass_variables
|
|
||||||
attr_writer :handlebars
|
|
||||||
attr_writer :serialized_current_user_fields
|
|
||||||
attr_writer :seed_data
|
|
||||||
attr_writer :svg_icons
|
|
||||||
attr_writer :locales
|
|
||||||
attr_accessor :custom_html
|
|
||||||
|
|
||||||
def plugins
|
define_singleton_method(register_name) do
|
||||||
@plugins ||= []
|
instance_variable_get(:"@#{register_name}") ||
|
||||||
|
instance_variable_set(:"@#{register_name}", type.new)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Default accessor values
|
define_method(register_name) do
|
||||||
def javascripts
|
self.class.public_send(register_name)
|
||||||
@javascripts ||= Set.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def auth_providers
|
|
||||||
@auth_providers ||= Set.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def service_workers
|
|
||||||
@service_workers ||= Set.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def asset_globs
|
|
||||||
@asset_globs ||= Set.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def admin_javascripts
|
|
||||||
@admin_javascripts ||= Set.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def stylesheets
|
|
||||||
@stylesheets ||= Hash.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def mobile_stylesheets
|
|
||||||
@mobile_stylesheets ||= Hash.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def desktop_stylesheets
|
|
||||||
@desktop_stylesheets ||= Hash.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def sass_variables
|
|
||||||
@sass_variables ||= Set.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def svg_icons
|
|
||||||
@svg_icons ||= []
|
|
||||||
end
|
|
||||||
|
|
||||||
def handlebars
|
|
||||||
@handlebars ||= Set.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def serialized_current_user_fields
|
|
||||||
@serialized_current_user_fields ||= Set.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def seed_data
|
|
||||||
@seed_data ||= HashWithIndifferentAccess.new({})
|
|
||||||
end
|
|
||||||
|
|
||||||
def locales
|
|
||||||
@locales ||= HashWithIndifferentAccess.new({})
|
|
||||||
end
|
|
||||||
|
|
||||||
def html_builders
|
|
||||||
@html_builders ||= {}
|
|
||||||
end
|
|
||||||
|
|
||||||
def seed_path_builders
|
|
||||||
@seed_path_builders ||= Set.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def vendored_pretty_text
|
|
||||||
@vendored_pretty_text ||= Set.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def vendored_core_pretty_text
|
|
||||||
@vendored_core_pretty_text ||= Set.new
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
define_register :javascripts, Set
|
||||||
|
define_register :auth_providers, Set
|
||||||
|
define_register :service_workers, Set
|
||||||
|
define_register :admin_javascripts, Set
|
||||||
|
define_register :stylesheets, Hash
|
||||||
|
define_register :mobile_stylesheets, Hash
|
||||||
|
define_register :desktop_stylesheets, Hash
|
||||||
|
define_register :sass_variables, Set
|
||||||
|
define_register :handlebars, Set
|
||||||
|
define_register :serialized_current_user_fields, Set
|
||||||
|
define_register :seed_data, HashWithIndifferentAccess
|
||||||
|
define_register :locales, HashWithIndifferentAccess
|
||||||
|
define_register :svg_icons, Set
|
||||||
|
define_register :custom_html, Hash
|
||||||
|
define_register :asset_globs, Set
|
||||||
|
define_register :html_builders, Hash
|
||||||
|
define_register :seed_path_builders, Set
|
||||||
|
define_register :vendored_pretty_text, Set
|
||||||
|
define_register :vendored_core_pretty_text, Set
|
||||||
|
|
||||||
def self.register_auth_provider(auth_provider)
|
def self.register_auth_provider(auth_provider)
|
||||||
self.auth_providers << auth_provider
|
self.auth_providers << auth_provider
|
||||||
end
|
end
|
||||||
@@ -230,70 +175,10 @@ class DiscoursePluginRegistry
|
|||||||
asset
|
asset
|
||||||
end
|
end
|
||||||
|
|
||||||
def locales
|
|
||||||
self.class.locales
|
|
||||||
end
|
|
||||||
|
|
||||||
def javascripts
|
|
||||||
self.class.javascripts
|
|
||||||
end
|
|
||||||
|
|
||||||
def auth_providers
|
|
||||||
self.class.auth_providers
|
|
||||||
end
|
|
||||||
|
|
||||||
def service_workers
|
|
||||||
self.class.service_workers
|
|
||||||
end
|
|
||||||
|
|
||||||
def stylesheets
|
|
||||||
self.class.stylesheets
|
|
||||||
end
|
|
||||||
|
|
||||||
def mobile_stylesheets
|
|
||||||
self.class.mobile_stylesheets
|
|
||||||
end
|
|
||||||
|
|
||||||
def desktop_stylesheets
|
|
||||||
self.class.desktop_stylesheets
|
|
||||||
end
|
|
||||||
|
|
||||||
def sass_variables
|
|
||||||
self.class.sass_variables
|
|
||||||
end
|
|
||||||
|
|
||||||
def handlebars
|
|
||||||
self.class.handlebars
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.clear
|
|
||||||
self.javascripts = nil
|
|
||||||
self.auth_providers = nil
|
|
||||||
self.service_workers = nil
|
|
||||||
self.stylesheets = nil
|
|
||||||
self.mobile_stylesheets = nil
|
|
||||||
self.desktop_stylesheets = nil
|
|
||||||
self.sass_variables = nil
|
|
||||||
self.handlebars = nil
|
|
||||||
self.locales = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.reset!
|
def self.reset!
|
||||||
javascripts.clear
|
@@register_names.each do |name|
|
||||||
auth_providers.clear
|
instance_variable_set(:"@#{name}", nil)
|
||||||
service_workers.clear
|
end
|
||||||
admin_javascripts.clear
|
|
||||||
stylesheets.clear
|
|
||||||
mobile_stylesheets.clear
|
|
||||||
desktop_stylesheets.clear
|
|
||||||
sass_variables.clear
|
|
||||||
serialized_current_user_fields
|
|
||||||
asset_globs.clear
|
|
||||||
html_builders.clear
|
|
||||||
vendored_pretty_text.clear
|
|
||||||
vendored_core_pretty_text.clear
|
|
||||||
seed_path_builders.clear
|
|
||||||
locales.clear
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -456,7 +456,6 @@ class Plugin::Instance
|
|||||||
end
|
end
|
||||||
|
|
||||||
def register_custom_html(hash)
|
def register_custom_html(hash)
|
||||||
DiscoursePluginRegistry.custom_html ||= {}
|
|
||||||
DiscoursePluginRegistry.custom_html.merge!(hash)
|
DiscoursePluginRegistry.custom_html.merge!(hash)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -12,42 +12,42 @@ describe DiscoursePluginRegistry do
|
|||||||
|
|
||||||
context '#stylesheets' do
|
context '#stylesheets' do
|
||||||
it 'defaults to an empty Set' do
|
it 'defaults to an empty Set' do
|
||||||
registry.stylesheets = nil
|
registry.reset!
|
||||||
expect(registry.stylesheets).to eq(Hash.new)
|
expect(registry.stylesheets).to eq(Hash.new)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '#mobile_stylesheets' do
|
context '#mobile_stylesheets' do
|
||||||
it 'defaults to an empty Set' do
|
it 'defaults to an empty Set' do
|
||||||
registry.mobile_stylesheets = nil
|
registry.reset!
|
||||||
expect(registry.mobile_stylesheets).to eq(Hash.new)
|
expect(registry.mobile_stylesheets).to eq(Hash.new)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '#javascripts' do
|
context '#javascripts' do
|
||||||
it 'defaults to an empty Set' do
|
it 'defaults to an empty Set' do
|
||||||
registry.javascripts = nil
|
registry.reset!
|
||||||
expect(registry.javascripts).to eq(Set.new)
|
expect(registry.javascripts).to eq(Set.new)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '#auth_providers' do
|
context '#auth_providers' do
|
||||||
it 'defaults to an empty Set' do
|
it 'defaults to an empty Set' do
|
||||||
registry.auth_providers = nil
|
registry.reset!
|
||||||
expect(registry.auth_providers).to eq(Set.new)
|
expect(registry.auth_providers).to eq(Set.new)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '#admin_javascripts' do
|
context '#admin_javascripts' do
|
||||||
it 'defaults to an empty Set' do
|
it 'defaults to an empty Set' do
|
||||||
registry.admin_javascripts = nil
|
registry.reset!
|
||||||
expect(registry.admin_javascripts).to eq(Set.new)
|
expect(registry.admin_javascripts).to eq(Set.new)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '#seed_data' do
|
context '#seed_data' do
|
||||||
it 'defaults to an empty Set' do
|
it 'defaults to an empty Set' do
|
||||||
registry.seed_data = nil
|
registry.reset!
|
||||||
expect(registry.seed_data).to be_a(Hash)
|
expect(registry.seed_data).to be_a(Hash)
|
||||||
expect(registry.seed_data.size).to eq(0)
|
expect(registry.seed_data.size).to eq(0)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ RSpec.configure do |config|
|
|||||||
# Ugly, but needed until we have a user creator
|
# Ugly, but needed until we have a user creator
|
||||||
User.skip_callback(:create, :after, :ensure_in_trust_level_group)
|
User.skip_callback(:create, :after, :ensure_in_trust_level_group)
|
||||||
|
|
||||||
DiscoursePluginRegistry.clear if ENV['LOAD_PLUGINS'] != "1"
|
DiscoursePluginRegistry.reset! if ENV['LOAD_PLUGINS'] != "1"
|
||||||
Discourse.current_user_provider = TestCurrentUserProvider
|
Discourse.current_user_provider = TestCurrentUserProvider
|
||||||
|
|
||||||
SiteSetting.refresh!
|
SiteSetting.refresh!
|
||||||
|
|||||||
Reference in New Issue
Block a user