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

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