Class: DiscordRDA::PluginRegistry
- Inherits:
-
Object
- Object
- DiscordRDA::PluginRegistry
- Defined in:
- lib/discord_rda/plugin/registry.rb
Overview
Plugin registry for managing loaded plugins.
Instance Attribute Summary collapse
-
#logger ⇒ Logger
readonly
Logger instance.
-
#plugins ⇒ Hash<Symbol, Plugin>
readonly
Registered plugins.
Instance Method Summary collapse
-
#all ⇒ Array<Plugin>
Get all plugins.
-
#clear ⇒ void
Clear all plugins.
-
#count ⇒ Integer
Get plugin count.
-
#enabled ⇒ Array<Plugin>
Get enabled plugins.
-
#get(name) ⇒ Plugin?
Get a plugin by name.
-
#initialize(logger: nil) ⇒ PluginRegistry
constructor
Initialize registry.
-
#names ⇒ Array<Symbol>
Get all registered plugin names.
-
#register(plugin, bot) ⇒ Boolean
Register a plugin.
-
#registered?(name) ⇒ Boolean
Check if plugin is registered.
-
#stats ⇒ Hash
Get registry statistics.
-
#unregister(name) ⇒ Boolean
Unregister a plugin.
Constructor Details
#initialize(logger: nil) ⇒ PluginRegistry
Initialize registry
15 16 17 18 19 |
# File 'lib/discord_rda/plugin/registry.rb', line 15 def initialize(logger: nil) @plugins = {} @logger = logger @mutex = Mutex.new end |
Instance Attribute Details
#logger ⇒ Logger (readonly)
Returns Logger instance.
11 12 13 |
# File 'lib/discord_rda/plugin/registry.rb', line 11 def logger @logger end |
#plugins ⇒ Hash<Symbol, Plugin> (readonly)
Returns Registered plugins.
8 9 10 |
# File 'lib/discord_rda/plugin/registry.rb', line 8 def plugins @plugins end |
Instance Method Details
#all ⇒ Array<Plugin>
Get all plugins
88 89 90 |
# File 'lib/discord_rda/plugin/registry.rb', line 88 def all @plugins.values end |
#clear ⇒ void
This method returns an undefined value.
Clear all plugins
100 101 102 103 104 105 106 107 108 |
# File 'lib/discord_rda/plugin/registry.rb', line 100 def clear @mutex.synchronize do @plugins.each_value do |plugin| plugin.disable plugin.teardown end @plugins.clear end end |
#count ⇒ Integer
Get plugin count
112 113 114 |
# File 'lib/discord_rda/plugin/registry.rb', line 112 def count @plugins.size end |
#enabled ⇒ Array<Plugin>
Get enabled plugins
94 95 96 |
# File 'lib/discord_rda/plugin/registry.rb', line 94 def enabled @plugins.values.select(&:enabled?) end |
#get(name) ⇒ Plugin?
Get a plugin by name
69 70 71 |
# File 'lib/discord_rda/plugin/registry.rb', line 69 def get(name) @plugins[name.to_sym] end |
#names ⇒ Array<Symbol>
Get all registered plugin names
82 83 84 |
# File 'lib/discord_rda/plugin/registry.rb', line 82 def names @plugins.keys end |
#register(plugin, bot) ⇒ Boolean
Register a plugin
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/discord_rda/plugin/registry.rb', line 25 def register(plugin, bot) name = plugin.name.to_sym @mutex.synchronize do if @plugins.key?(name) @logger&.warn('Plugin already registered', name: name) return false end unless plugin.dependencies_met?(@plugins.keys) @logger&.error('Plugin dependencies not met', name: name, deps: plugin.dependencies) return false end @plugins[name] = plugin plugin.setup(bot) plugin.enable @logger&.info('Plugin registered', name: name, version: plugin.version) true end end |
#registered?(name) ⇒ Boolean
Check if plugin is registered
76 77 78 |
# File 'lib/discord_rda/plugin/registry.rb', line 76 def registered?(name) @plugins.key?(name.to_sym) end |
#stats ⇒ Hash
Get registry statistics
118 119 120 121 122 123 124 |
# File 'lib/discord_rda/plugin/registry.rb', line 118 def stats { total: @plugins.size, enabled: enabled.size, plugins: @plugins.transform_values(&:metadata) } end |
#unregister(name) ⇒ Boolean
Unregister a plugin
51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/discord_rda/plugin/registry.rb', line 51 def unregister(name) name = name.to_sym @mutex.synchronize do plugin = @plugins.delete(name) return false unless plugin plugin.disable plugin.teardown @logger&.info('Plugin unregistered', name: name) true end end |