Class: Familia::Encryption::Registry

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

Overview

Registry pattern for managing encryption providers

Class Method Summary collapse

Class Method Details

.available_algorithmsObject



37
38
39
# File 'lib/familia/encryption/registry.rb', line 37

def available_algorithms
  providers.keys
end

.default_providerObject



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

def default_provider
  # Select provider with highest priority
  @default_provider ||= begin
    available = providers.values.select(&:available?)
    available.max_by(&:priority)&.new
  end
end

.get(algorithm) ⇒ Object

Raises:



18
19
20
21
22
23
# File 'lib/familia/encryption/registry.rb', line 18

def get(algorithm)
  provider_class = providers[algorithm]
  raise EncryptionError, "Unsupported algorithm: #{algorithm}" unless provider_class

  provider_class.new
end

.providersObject



8
9
10
# File 'lib/familia/encryption/registry.rb', line 8

def providers
  @providers ||= {}
end

.register(provider_class) ⇒ Object



12
13
14
15
16
# File 'lib/familia/encryption/registry.rb', line 12

def register(provider_class)
  return unless provider_class.available?

  providers[provider_class::ALGORITHM] = provider_class
end

.reset_default_provider!Object



33
34
35
# File 'lib/familia/encryption/registry.rb', line 33

def reset_default_provider!
  @default_provider = nil
end

.setup!Object

Auto-register known providers



42
43
44
45
46
# File 'lib/familia/encryption/registry.rb', line 42

def setup!
  register(Providers::XChaCha20Poly1305Provider)
  register(Providers::AESGCMProvider)
  # Future: register(Providers::ChaCha20Poly1305Provider)
end