Class: Familia::Encryption::Registry
- Inherits:
-
Object
- Object
- Familia::Encryption::Registry
- Defined in:
- lib/familia/encryption/registry.rb
Overview
Registry pattern for managing encryption providers
Class Method Summary collapse
- .available_algorithms ⇒ Object
- .default_provider ⇒ Object
- .get(algorithm) ⇒ Object
- .providers ⇒ Object
- .register(provider_class) ⇒ Object
- .reset_default_provider! ⇒ Object
-
.setup! ⇒ Object
Auto-register known providers.
Class Method Details
.available_algorithms ⇒ Object
39 40 41 |
# File 'lib/familia/encryption/registry.rb', line 39 def available_algorithms providers.keys end |
.default_provider ⇒ Object
27 28 29 30 31 32 33 |
# File 'lib/familia/encryption/registry.rb', line 27 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
20 21 22 23 24 25 |
# File 'lib/familia/encryption/registry.rb', line 20 def get(algorithm) provider_class = providers[algorithm] raise EncryptionError, "Unsupported algorithm: #{algorithm}" unless provider_class provider_class.new end |
.providers ⇒ Object
10 11 12 |
# File 'lib/familia/encryption/registry.rb', line 10 def providers @providers ||= {} end |
.register(provider_class) ⇒ Object
14 15 16 17 18 |
# File 'lib/familia/encryption/registry.rb', line 14 def register(provider_class) return unless provider_class.available? providers[provider_class::ALGORITHM] = provider_class end |
.reset_default_provider! ⇒ Object
35 36 37 |
# File 'lib/familia/encryption/registry.rb', line 35 def reset_default_provider! @default_provider = nil end |
.setup! ⇒ Object
Auto-register known providers
44 45 46 47 48 |
# File 'lib/familia/encryption/registry.rb', line 44 def setup! register(Providers::XChaCha20Poly1305Provider) register(Providers::AESGCMProvider) # Future: register(Providers::ChaCha20Poly1305Provider) end |