Module: Omnitrack::Registry

Defined in:
lib/omnitrack/registry.rb

Overview

Thread-safe registry mapping adapter names (symbols) → adapter classes. Adapters are auto-registered via Base.inherited and can also be registered manually with Registry.register.

Class Method Summary collapse

Class Method Details

.enabled_adaptersArray<Omnitrack::Adapters::Base>

Instantiate all enabled adapters based on current configuration.

Returns:



40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/omnitrack/registry.rb', line 40

def enabled_adapters
  MUTEX.synchronize { @adapters.dup }.map do |adapter_name, klass|
    cfg = Omnitrack.config.adapter_config(adapter_name)
    next unless cfg.fetch(:enabled, false)

    klass.new(config: cfg, logger: Omnitrack.logger)
  rescue Omnitrack::ConfigurationError => e
    Omnitrack.logger.error("registry.init_error",
                           adapter: adapter_name, message: e.message)
    nil
  end.compact
end

.lookup(name) ⇒ Class

Look up an adapter class by name.

Parameters:

  • name (Symbol, String)

Returns:

  • (Class)

Raises:



26
27
28
29
30
31
# File 'lib/omnitrack/registry.rb', line 26

def lookup(name)
  klass = MUTEX.synchronize { @adapters[name.to_sym] }
  raise Omnitrack::UnknownAdapterError, "Unknown adapter: #{name}" unless klass

  klass
end

.register(klass) ⇒ Object

Register an adapter class.

Parameters:

  • klass (Class)

    must inherit from Omnitrack::Adapters::Base



16
17
18
19
20
# File 'lib/omnitrack/registry.rb', line 16

def register(klass)
  MUTEX.synchronize do
    @adapters[klass.adapter_name] = klass
  end
end

.registeredObject

All registered adapter names



34
35
36
# File 'lib/omnitrack/registry.rb', line 34

def registered
  MUTEX.synchronize { @adapters.keys }
end

.reset!Object

Clear all registrations (useful in tests)



54
55
56
# File 'lib/omnitrack/registry.rb', line 54

def reset!
  MUTEX.synchronize { @adapters = {} }
end