mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 04:01:18 +08:00
DEV: Add framework for filtered plugin registers (#9763)
* DEV: Add framework for filtered plugin registers Plugins often need to add values to a list, and we need to filter those lists at runtime to ignore values from disabled plugins. This commit provides a re-usable way to do that, which should make it easier to add new registers in future, and also reduce repeated code. Follow-up commits will migrate existing registers to use this new system * DEV: Migrate user and group custom field APIs to plugin registry This gives us a consistent system for checking plugin enabled state, so we are repeating less logic. API changes are backwards compatible
This commit is contained in:
@ -24,6 +24,29 @@ class DiscoursePluginRegistry
|
||||
end
|
||||
end
|
||||
|
||||
# Create a new register (see `define_register`) with some additions:
|
||||
# - Register is created in a class variable using the specified name/type
|
||||
# - Defines singleton method to access the register
|
||||
# - Defines instance method as a shortcut to the singleton method
|
||||
# - Automatically deletes the register on ::clear!
|
||||
def self.define_filtered_register(register_name)
|
||||
define_register(register_name, Array)
|
||||
|
||||
singleton_class.alias_method :"_raw_#{register_name}", :"#{register_name}"
|
||||
|
||||
define_singleton_method(register_name) do
|
||||
unfiltered = public_send(:"_raw_#{register_name}")
|
||||
unfiltered
|
||||
.filter { |v| v[:plugin].enabled? }
|
||||
.map { |v| v[:value] }
|
||||
.uniq
|
||||
end
|
||||
|
||||
define_singleton_method("register_#{register_name.to_s.singularize}") do |value, plugin|
|
||||
public_send(:"_raw_#{register_name}") << { plugin: plugin, value: value }
|
||||
end
|
||||
end
|
||||
|
||||
define_register :javascripts, Set
|
||||
define_register :auth_providers, Set
|
||||
define_register :service_workers, Set
|
||||
@ -44,6 +67,14 @@ class DiscoursePluginRegistry
|
||||
define_register :vendored_pretty_text, Set
|
||||
define_register :vendored_core_pretty_text, Set
|
||||
|
||||
define_filtered_register :staff_user_custom_fields
|
||||
define_filtered_register :public_user_custom_fields
|
||||
|
||||
define_filtered_register :self_editable_user_custom_fields
|
||||
define_filtered_register :staff_editable_user_custom_fields
|
||||
|
||||
define_filtered_register :editable_group_custom_fields
|
||||
|
||||
def self.register_auth_provider(auth_provider)
|
||||
self.auth_providers << auth_provider
|
||||
end
|
||||
|
Reference in New Issue
Block a user