Class: Desiru::Registry

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

Overview

Module registry for managing and discovering Desiru modules Implements service locator pattern for module management

Instance Method Summary collapse

Constructor Details

#initializeRegistry

Returns a new instance of Registry.



11
12
13
14
15
# File 'lib/desiru/registry.rb', line 11

def initialize
  @modules = {}
  @module_versions = Hash.new { |h, k| h[k] = {} }
  @module_metadata = {}
end

Instance Method Details

#clear!Object



55
56
57
58
59
# File 'lib/desiru/registry.rb', line 55

def clear!
  @modules.clear
  @module_versions.clear
  @module_metadata.clear
end

#get(name, version: nil) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/desiru/registry.rb', line 32

def get(name, version: nil)
  name = name.to_sym

  return @module_versions[name][version] || raise(ModuleError, "Module #{name} v#{version} not found") if version

  @modules[name] || raise(ModuleError, "Module #{name} not found")
end

#listObject



40
41
42
# File 'lib/desiru/registry.rb', line 40

def list
  @modules.keys
end

#metadata(name) ⇒ Object



44
45
46
# File 'lib/desiru/registry.rb', line 44

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

#register(name, klass, version: '1.0.0', metadata: {}) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/desiru/registry.rb', line 17

def register(name, klass, version: '1.0.0', metadata: {})
  validate_module!(klass)

  name = name.to_sym
  @modules[name] = klass
  @module_versions[name][version] = klass
  @module_metadata[name] = .merge(
    registered_at: Time.now,
    version: version,
    class: klass.name
  )

  Desiru.configuration.logger&.info("Registered module: #{name} v#{version}")
end

#unregister(name) ⇒ Object



48
49
50
51
52
53
# File 'lib/desiru/registry.rb', line 48

def unregister(name)
  name = name.to_sym
  @modules.delete(name)
  @module_versions.delete(name)
  @module_metadata.delete(name)
end