Module: Riffer::Providers::Repository
- Extended by:
- Repository
- Included in:
- Riffer, Repository
- Defined in:
- lib/riffer/providers/repository.rb
Overview
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.
Constant Summary collapse
- REPO =
{ amazon_bedrock: -> { Riffer::Providers::AmazonBedrock }, anthropic: -> { Riffer::Providers::Anthropic }, azure_openai: -> { Riffer::Providers::AzureOpenAI }, gemini: -> { Riffer::Providers::Gemini }, openai: -> { Riffer::Providers::OpenAI }, openrouter: -> { Riffer::Providers::OpenRouter }, mock: -> { Riffer::Providers::Mock } }.freeze
Instance Method Summary collapse
-
#find(identifier) ⇒ Object
Finds a provider class by identifier, preferring a custom registration over a built-in of the same name.
-
#key_for(provider_class) ⇒ Object
Returns the registry identifier for a provider class, or nil when unregistered.
-
#register(identifier, &factory) ⇒ Object
Registers a custom provider under
identifier, resolved lazily by the block. -
#unregister(identifier) ⇒ Object
Removes a custom registration by identifier, leaving any built-in of the same name intact.
Instance Method Details
#find(identifier) ⇒ Object
Finds a provider class by identifier, preferring a custom registration over a built-in of the same name.
-- : ((String | Symbol)) -> singleton(Riffer::Providers::Base)?
55 56 57 58 |
# File 'lib/riffer/providers/repository.rb', line 55 def find(identifier) key = identifier.to_sym (@registrations[key] || REPO[key])&.call end |
#key_for(provider_class) ⇒ Object
Returns the registry identifier for a provider class, or nil when unregistered.
: (singleton(Riffer::Providers::Base)) -> Symbol?
63 64 65 |
# File 'lib/riffer/providers/repository.rb', line 63 def key_for(provider_class) (@key_for ||= build_key_index)[provider_class] end |
#register(identifier, &factory) ⇒ Object
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.
-- : ((String | Symbol)) { () -> singleton(Riffer::Providers::Base) } -> void
34 35 36 37 38 39 |
# 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 |
#unregister(identifier) ⇒ Object
Removes a custom registration by identifier, leaving any built-in of the same name intact.
: ((String | Symbol)) -> void
45 46 47 48 |
# File 'lib/riffer/providers/repository.rb', line 45 def unregister(identifier) @registrations.delete(identifier.to_sym) @key_for = nil end |