module Riffer::Providers::Repository
Resolves provider classes by identifier, combining the built-in REPO with consumer registrations added through register. Registration is not synchronized — register during boot, before concurrent generation begins.
Constants
- REPO
-
@rbs @registrations: Hash[Symbol, ^() -> singleton(
Riffer::Providers::Base)] @rbs @key_for: Hash[singleton(Riffer::Providers::Base), Symbol]?
Public Instance Methods
Source
# File lib/riffer/providers/repository.rb, line 55 def find(identifier) key = identifier.to_sym (@registrations[key] || REPO[key])&.call end
Finds a provider class by identifier, preferring a custom registration over a built-in of the same name.
Source
# File lib/riffer/providers/repository.rb, line 63 def key_for(provider_class) (@key_for ||= build_key_index)[provider_class] end
Returns the registry identifier for a provider class, or nil when unregistered.
Source
# File lib/riffer/providers/repository.rb, line 34 def register(identifier, &factory) raise Riffer::ArgumentError, "register requires a block returning a provider class" unless factory @registrations[identifier.to_sym] = factory @key_for = nil end
Registers a custom provider under identifier, resolved lazily by the block. Takes precedence over a built-in sharing the identifier.
Riffer::Providers::Repository.register(:jane) { MyApp::JaneProvider }
Raises Riffer::ArgumentError when called without a block.
Source
# File lib/riffer/providers/repository.rb, line 45 def unregister(identifier) @registrations.delete(identifier.to_sym) @key_for = nil end
Removes a custom registration by identifier, leaving any built-in of the same name intact.