Class: Fastlane::Helper::Providers::ProviderFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/fastlane/plugin/translate_gpt_release_notes/helper/providers/provider_factory.rb

Overview

ProviderFactory is the central component for creating provider instances. It uses CredentialResolver to resolve API keys and instantiates the appropriate provider based on the provider_name parameter.

This class provides a unified interface for creating any supported provider with automatic credential resolution and validation.

Examples:

Creating a provider with automatic credential resolution

provider = ProviderFactory.create('openai', { model_name: 'gpt-5.2' })

Creating a provider with explicit API key

provider = ProviderFactory.create_with_key('openai', 'sk-...', { model_name: 'gpt-5.2' })

Constant Summary collapse

PROVIDERS =

Mapping of provider names to their respective provider classes. Used to look up and instantiate the correct provider implementation.

{
  OpenAIProvider.provider_name => OpenAIProvider,
  AnthropicProvider.provider_name => AnthropicProvider,
  GeminiProvider.provider_name => GeminiProvider,
  DeepLProvider.provider_name => DeepLProvider
}.freeze
DEFAULT_PROVIDER =

Default provider to use when none is specified.

'openai'.freeze

Class Method Summary collapse

Class Method Details

.available_provider_namesArray<String>

Returns an array of all available provider names.

Returns:

  • (Array<String>)

    Array of provider identifiers.



101
102
103
# File 'lib/fastlane/plugin/translate_gpt_release_notes/helper/providers/provider_factory.rb', line 101

def self.available_provider_names
  PROVIDERS.keys.freeze
end

.create(provider_name, params) ⇒ BaseProvider

Creates a provider instance with automatic credential resolution.

This method resolves the API key using CredentialResolver, merges it into the params, and instantiates the appropriate provider class.

Parameters:

  • provider_name (String, nil)

    The provider identifier (e.g., ‘openai’, ‘anthropic’). Defaults to DEFAULT_PROVIDER if nil or not provided.

  • params (Hash)

    Configuration parameters for the provider. May include provider-specific options and credential overrides.

Returns:

  • (BaseProvider)

    An instance of the requested provider class.

Raises:

  • (FastlaneCore::Interface::FastlaneError)

    If the provider name is unknown or if no API key can be resolved.



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/fastlane/plugin/translate_gpt_release_notes/helper/providers/provider_factory.rb', line 49

def self.create(provider_name, params)
  provider_name = provider_name.to_s.empty? ? DEFAULT_PROVIDER : provider_name.to_s.downcase
  provider_class = PROVIDERS[provider_name]

  unless provider_class
    UI.user_error!("Unknown provider '#{provider_name}'. Available: #{available_provider_names.join(', ')}")
    return nil
  end

  # Resolve API key
  api_key = CredentialResolver.resolve(provider_name, params)

  unless api_key
    UI.user_error!("No API key found for provider '#{provider_name}'. #{CredentialResolver.credential_help(provider_name)}")
    return nil
  end

  # Merge API key into params (handle FastlaneCore::Configuration objects)
  params_hash = params.is_a?(Hash) ? params : params.values
  provider_params = params_hash.merge(api_token: api_key)

  provider_class.new(provider_params)
end

.create_with_key(provider_name, api_key, params = {}) ⇒ BaseProvider

Creates a provider instance with an explicit API key.

This method bypasses credential resolution and uses the provided API key directly. Useful when the key is obtained from an external source or when credential resolution is not desired.

Parameters:

  • provider_name (String)

    The provider identifier (e.g., ‘openai’, ‘anthropic’).

  • api_key (String)

    The API key to use for authentication.

  • params (Hash) (defaults to: {})

    Optional configuration parameters for the provider.

Returns:

  • (BaseProvider)

    An instance of the requested provider class.

Raises:

  • (FastlaneCore::Interface::FastlaneError)

    If the provider name is unknown.



84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/fastlane/plugin/translate_gpt_release_notes/helper/providers/provider_factory.rb', line 84

def self.create_with_key(provider_name, api_key, params = {})
  provider_name = provider_name.to_s.downcase
  provider_class = PROVIDERS[provider_name]

  unless provider_class
    UI.user_error!("Unknown provider '#{provider_name}'")
    return nil
  end

  params_hash = params.is_a?(Hash) ? params : params.values
  provider_params = params_hash.merge(api_token: api_key)
  provider_class.new(provider_params)
end

.provider_config(provider_name) ⇒ Hash

Gets the full configuration for a provider.

Returns a comprehensive hash containing all configuration details for the specified provider, including name, display name, required credentials, optional parameters, and credential help text.

Parameters:

  • provider_name (String)

    The provider identifier.

Returns:

  • (Hash)

    Provider configuration hash with keys:

    • :name [String] Provider identifier

    • :display_name [String] Human-readable name

    • :required_credentials [Array<Symbol>] Required credential symbols

    • :optional_params [Hash] Optional parameter definitions

    • :credential_help [String] Help text for configuring credentials

  • (Hash)

    Empty hash if provider is not found.



135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/fastlane/plugin/translate_gpt_release_notes/helper/providers/provider_factory.rb', line 135

def self.provider_config(provider_name)
  provider_class = PROVIDERS[provider_name.to_s.downcase]
  return {} unless provider_class

  {
    name: provider_class.provider_name,
    display_name: provider_class.display_name,
    required_credentials: provider_class.required_credentials,
    optional_params: provider_class.optional_params,
    credential_help: CredentialResolver.credential_help(provider_name)
  }
end

.provider_display_namesHash<String, String>

Returns a hash mapping provider names to their display names.

Returns:

  • (Hash<String, String>)

    Hash with provider names as keys and human-readable display names as values.



109
110
111
# File 'lib/fastlane/plugin/translate_gpt_release_notes/helper/providers/provider_factory.rb', line 109

def self.provider_display_names
  PROVIDERS.transform_values(&:display_name)
end

.valid_provider?(provider_name) ⇒ Boolean

Checks if a provider name is valid.

Parameters:

  • provider_name (String)

    The provider identifier to check.

Returns:

  • (Boolean)

    true if the provider is supported, false otherwise.



117
118
119
# File 'lib/fastlane/plugin/translate_gpt_release_notes/helper/providers/provider_factory.rb', line 117

def self.valid_provider?(provider_name)
  PROVIDERS.key?(provider_name.to_s.downcase)
end