Class: Lapsoss::Registry

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/lapsoss/registry.rb

Defined Under Namespace

Classes: AdapterNotFoundError, DuplicateAdapterError

Instance Method Summary collapse

Constructor Details

#initializeRegistry

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

Parameters:

  • name (Symbol)

    The adapter name

Returns:

  • (Adapter, nil)

    The adapter instance or nil



67
68
69
# File 'lib/lapsoss/registry.rb', line 67

def [](name)
  @adapters[name.to_sym]
end

#activeArray<Adapter>

Get all active (enabled) adapters

Returns:

  • (Array<Adapter>)

    Active adapter instances



81
82
83
# File 'lib/lapsoss/registry.rb', line 81

def active
  @adapters.values.select(&:enabled?)
end

#adaptersArray<Adapter>

Get all registered adapters (alias for all)

Returns:

  • (Array<Adapter>)

    All adapter instances



111
112
113
# File 'lib/lapsoss/registry.rb', line 111

def adapters
  all
end

#allArray<Adapter>

Get all registered adapters

Returns:

  • (Array<Adapter>)

    All adapter instances



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

#namesArray<Symbol>

Get adapter names

Returns:

  • (Array<Symbol>)

    Registered 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

Parameters:

  • name (Symbol)

    Unique identifier for this adapter instance

  • type (Symbol)

    The adapter type (e.g., :sentry, :appsignal)

  • settings (Hash)

    Configuration for the adapter

Returns:

  • (Adapter)

    The registered adapter instance

Raises:



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)

Parameters:

  • adapter (Adapter)

    The adapter instance to register

Raises:

  • (ArgumentError)


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

Parameters:

  • name (Symbol)

    The adapter name

Returns:

  • (Boolean)


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

Parameters:

  • name (Symbol)

    The adapter name to remove



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