Class: TypedCache::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/typed_cache/registry.rb

Overview

Generic registry for managing class-based factories

Instance Method Summary collapse

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

#availableObject



57
58
59
# File 'lib/typed_cache/registry.rb', line 57

def available
  @registry.keys
end

#clearObject



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

Returns:

  • (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.message}",
    e,
  ))
end