Class: Desiru::Registry
- Inherits:
-
Object
- Object
- Desiru::Registry
- 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
- #clear! ⇒ Object
- #get(name, version: nil) ⇒ Object
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
- #list ⇒ Object
- #metadata(name) ⇒ Object
- #register(name, klass, version: '1.0.0', metadata: {}) ⇒ Object
- #unregister(name) ⇒ Object
Constructor Details
#initialize ⇒ Registry
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 |
#list ⇒ Object
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 |