Class: Lapsoss::Registry
- Inherits:
-
Object
- Object
- Lapsoss::Registry
- Includes:
- Singleton
- Defined in:
- lib/lapsoss/registry.rb
Defined Under Namespace
Classes: AdapterNotFoundError, DuplicateAdapterError
Instance Method Summary collapse
-
#[](name) ⇒ Adapter?
Get a specific adapter by name.
-
#active ⇒ Array<Adapter>
Get all active (enabled) adapters.
-
#adapters ⇒ Array<Adapter>
Get all registered adapters (alias for all).
-
#all ⇒ Array<Adapter>
Get all registered adapters.
-
#clear! ⇒ Object
Clear all adapters.
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
-
#names ⇒ Array<Symbol>
Get adapter names.
-
#register(name, type, **settings) ⇒ Adapter
Register a named adapter instance.
-
#register_adapter(adapter) ⇒ Object
Register an adapter instance directly (for testing).
-
#registered?(name) ⇒ Boolean
Check if an adapter is registered.
-
#unregister(name) ⇒ Object
Unregister an adapter.
Constructor Details
#initialize ⇒ Registry
Returns a new instance of Registry.
14 15 16 |
# File 'lib/lapsoss/registry.rb', line 14 def initialize @adapters = Concurrent::Map.new end |
Instance Method Details
#[](name) ⇒ Adapter?
Get a specific adapter by name
67 68 69 |
# File 'lib/lapsoss/registry.rb', line 67 def [](name) @adapters[name.to_sym] end |
#active ⇒ Array<Adapter>
Get all active (enabled) adapters
81 82 83 |
# File 'lib/lapsoss/registry.rb', line 81 def active @adapters.values.select(&:enabled?) end |
#adapters ⇒ Array<Adapter>
Get all registered adapters (alias for all)
111 112 113 |
# File 'lib/lapsoss/registry.rb', line 111 def adapters all end |
#all ⇒ Array<Adapter>
Get all registered adapters
74 75 76 |
# File 'lib/lapsoss/registry.rb', line 74 def all @adapters.values end |
#clear! ⇒ Object
Clear all adapters
94 95 96 97 98 99 |
# File 'lib/lapsoss/registry.rb', line 94 def clear! @adapters.each_value do |adapter| adapter.shutdown if adapter.respond_to?(:shutdown) end @adapters.clear end |
#names ⇒ Array<Symbol>
Get adapter names
104 105 106 |
# File 'lib/lapsoss/registry.rb', line 104 def names @adapters.keys end |
#register(name, type, **settings) ⇒ Adapter
Register a named adapter instance
24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/lapsoss/registry.rb', line 24 def register(name, type, **settings) name = name.to_sym # Check if adapter already exists raise DuplicateAdapterError, "Adapter '#{name}' already registered" if @adapters.key?(name) adapter_class = resolve_adapter_class(type) adapter = adapter_class.new(name, settings) @adapters[name] = adapter adapter end |
#register_adapter(adapter) ⇒ Object
Register an adapter instance directly (for testing)
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/lapsoss/registry.rb', line 39 def register_adapter(adapter) # Ensure we're getting an adapter instance, not a config hash raise ArgumentError, "Expected an adapter instance, got #{adapter.class}" unless adapter.respond_to?(:capture) name = if adapter.respond_to?(:name) && adapter.name adapter.name.to_sym elsif adapter.class.name adapter.class.name.demodulize.underscore.to_sym else # Generate a unique name if class name is nil (anonymous class) :"adapter_#{adapter.object_id}" end @adapters[name] = adapter end |
#registered?(name) ⇒ Boolean
Check if an adapter is registered
89 90 91 |
# File 'lib/lapsoss/registry.rb', line 89 def registered?(name) @adapters.key?(name.to_sym) end |
#unregister(name) ⇒ Object
Unregister an adapter
57 58 59 60 61 |
# File 'lib/lapsoss/registry.rb', line 57 def unregister(name) adapter = @adapters.delete(name.to_sym) adapter&.shutdown if adapter.respond_to?(:shutdown) adapter end |