Class: TypedCache::Registry
- Inherits:
-
Object
- Object
- TypedCache::Registry
- Defined in:
- lib/typed_cache/registry.rb
Overview
Generic registry for managing class-based factories
Instance Method Summary collapse
- #available ⇒ Object
- #clear ⇒ Object
- #find(key) ⇒ Object
-
#initialize(name, defaults = {}) ⇒ Registry
constructor
A new instance of Registry.
- #initialize_copy(other) ⇒ Object
- #register(key, klass) ⇒ Object
- #registered?(key) ⇒ Boolean
- #resolve(key) ⇒ Object
Constructor Details
#initialize(name, defaults = {}) ⇒ Registry
Returns a new instance of Registry.
8 9 10 11 |
# File 'lib/typed_cache/registry.rb', line 8 def initialize(name, defaults = {}) @name = name @registry = defaults.dup end |
Instance Method Details
#available ⇒ Object
57 58 59 |
# File 'lib/typed_cache/registry.rb', line 57 def available @registry.keys end |
#clear ⇒ Object
20 21 22 |
# File 'lib/typed_cache/registry.rb', line 20 def clear @registry.clear end |
#find(key) ⇒ Object
40 41 42 43 44 45 |
# File 'lib/typed_cache/registry.rb', line 40 def find(key) klass = @registry[key] return Maybe.none unless klass Maybe.some(klass) end |
#initialize_copy(other) ⇒ Object
14 15 16 17 |
# File 'lib/typed_cache/registry.rb', line 14 def initialize_copy(other) super @registry = other.registry.dup end |
#register(key, klass) ⇒ Object
48 49 50 51 52 53 54 |
# File 'lib/typed_cache/registry.rb', line 48 def register(key, klass) return Either.left(ArgumentError.new("#{@name.capitalize} name cannot be nil")) if key.nil? return Either.left(ArgumentError.new("#{@name.capitalize} class cannot be nil")) if klass.nil? @registry[key] = klass Either.right(nil) end |
#registered?(key) ⇒ Boolean
62 63 64 |
# File 'lib/typed_cache/registry.rb', line 62 def registered?(key) @registry.key?(key) end |
#resolve(key) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/typed_cache/registry.rb', line 25 def resolve(key, *, **, &) klass = @registry[key] return Either.left(ArgumentError.new("Unknown #{@name}: #{key}")) unless klass Either.right(klass.new(*, **)) rescue => e Either.left(StoreError.new( :"#{@name}_creation", key.to_s, "Failed to create #{@name} '#{key}': #{e.}", e, )) end |