Class: RailsErrorDashboard::PluginRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_error_dashboard/plugin_registry.rb

Overview

Registry for managing plugins Provides plugin registration and event dispatching

Class Method Summary collapse

Class Method Details

.any?Boolean

Check if any plugins are registered

Returns:

  • (Boolean)


66
67
68
# File 'lib/rails_error_dashboard/plugin_registry.rb', line 66

def any?
  plugins.any?
end

.clearObject

Clear all plugins (useful for testing)



38
39
40
# File 'lib/rails_error_dashboard/plugin_registry.rb', line 38

def clear
  @plugins = []
end

.countObject

Get count of registered plugins



61
62
63
# File 'lib/rails_error_dashboard/plugin_registry.rb', line 61

def count
  plugins.size
end

.dispatch(event_name, *args) ⇒ Object

Dispatch an event to all registered plugins

Parameters:

  • event_name (Symbol)

    The event name (e.g., :on_error_logged)

  • args (Array)

    Arguments to pass to the event handler



52
53
54
55
56
57
58
# File 'lib/rails_error_dashboard/plugin_registry.rb', line 52

def dispatch(event_name, *args)
  plugins.each do |plugin|
    next unless plugin.enabled?

    plugin.safe_execute(event_name, *args)
  end
end

.find(plugin_name) ⇒ Plugin?

Get a plugin by name

Parameters:

  • plugin_name (String)

    The name of the plugin

Returns:

  • (Plugin, nil)

    The plugin instance or nil if not found



45
46
47
# File 'lib/rails_error_dashboard/plugin_registry.rb', line 45

def find(plugin_name)
  plugins.find { |p| p.name == plugin_name }
end

.infoObject

Get plugin information for debugging



76
77
78
79
80
81
82
83
84
85
# File 'lib/rails_error_dashboard/plugin_registry.rb', line 76

def info
  plugins.map do |plugin|
    {
      name: plugin.name,
      version: plugin.version,
      description: plugin.description,
      enabled: plugin.enabled?
    }
  end
end

.namesObject

Get list of plugin names



71
72
73
# File 'lib/rails_error_dashboard/plugin_registry.rb', line 71

def names
  plugins.map(&:name)
end

.pluginsObject

Get all registered plugins



9
10
11
# File 'lib/rails_error_dashboard/plugin_registry.rb', line 9

def plugins
  @plugins ||= []
end

.register(plugin) ⇒ Object

Register a plugin

Parameters:

  • plugin (Plugin)

    The plugin instance to register



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/rails_error_dashboard/plugin_registry.rb', line 15

def register(plugin)
  unless plugin.is_a?(Plugin)
    raise ArgumentError, "Plugin must be an instance of RailsErrorDashboard::Plugin"
  end

  if plugins.any? { |p| p.name == plugin.name }
    RailsErrorDashboard::Logger.warn("Plugin '#{plugin.name}' is already registered, skipping")
    return false
  end

  plugins << plugin
  plugin.on_register
  RailsErrorDashboard::Logger.info("Registered plugin: #{plugin.name} (#{plugin.version})")
  true
end

.unregister(plugin_name) ⇒ Object

Unregister a plugin by name

Parameters:

  • plugin_name (String)

    The name of the plugin to unregister



33
34
35
# File 'lib/rails_error_dashboard/plugin_registry.rb', line 33

def unregister(plugin_name)
  plugins.reject! { |p| p.name == plugin_name }
end