Class: Fastlane::Helper::CredentialResolver

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

Overview

CredentialResolver manages multiple provider API keys simultaneously, allowing users to configure keys for all providers and select which to use via the provider parameter.

This class provides a centralized way to resolve API credentials from various sources (parameters, environment variables) with a defined priority order.

Constant Summary collapse

PROVIDER_CREDENTIALS =

Maps each provider to its credential configuration Each provider has:

  • env_vars: Array of environment variable names to check (in order)

  • param_key: Symbol for the parameter key in the params hash

{
  'openai' => {
    env_vars: ['OPENAI_API_KEY', 'GPT_API_KEY'],  # GPT_API_KEY for backward compatibility
    param_key: :openai_api_key
  },
  'anthropic' => {
    env_vars: ['ANTHROPIC_API_KEY'],
    param_key: :anthropic_api_key
  },
  'gemini' => {
    env_vars: ['GEMINI_API_KEY'],
    param_key: :gemini_api_key
  },
  'deepl' => {
    env_vars: ['DEEPL_API_KEY'],
    param_key: :deepl_api_key
  }
}.freeze

Class Method Summary collapse

Class Method Details

.all_providersArray<String>

Returns an array of all supported provider names.

Returns:

  • (Array<String>)

    Array of all supported provider names



100
101
102
# File 'lib/fastlane/plugin/translate_gpt_release_notes/helper/credential_resolver.rb', line 100

def self.all_providers
  PROVIDER_CREDENTIALS.keys.freeze
end

.available_providers(params = {}) ⇒ Array<String>

Returns an array of provider names that have configured credentials.

Parameters:

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

    Hash of parameters that may contain API keys

Returns:

  • (Array<String>)

    Array of provider names with valid credentials



72
73
74
75
76
# File 'lib/fastlane/plugin/translate_gpt_release_notes/helper/credential_resolver.rb', line 72

def self.available_providers(params = {})
  PROVIDER_CREDENTIALS.keys.select do |provider_name|
    credentials_exist?(provider_name, params)
  end
end

.credential_help(provider_name) ⇒ String

Returns help text explaining how to configure credentials for a provider.

Parameters:

  • provider_name (String)

    The provider identifier

Returns:

  • (String)

    Help text for configuring credentials



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

def self.credential_help(provider_name)
  config = provider_config(provider_name)
  return "Unknown provider: #{provider_name}" unless config

  env_vars = config[:env_vars]
  param_key = config[:param_key]

  if env_vars.length == 1
    "Set #{env_vars.first} environment variable, or pass :#{param_key} parameter"
  else
    env_vars_str = env_vars.join(' or ')
    "Set #{env_vars_str} environment variable, or pass :#{param_key} parameter"
  end
end

.credentials_exist?(provider_name, params = {}) ⇒ Boolean

Checks if credentials exist for a given provider.

Parameters:

  • provider_name (String)

    The provider identifier

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

    Hash of parameters that may contain API keys

Returns:

  • (Boolean)

    true if credentials exist, false otherwise



64
65
66
# File 'lib/fastlane/plugin/translate_gpt_release_notes/helper/credential_resolver.rb', line 64

def self.credentials_exist?(provider_name, params = {})
  !resolve(provider_name, params).nil?
end

.provider_config(provider_name) ⇒ Hash?

Retrieves the credential configuration for a provider. Handles case-insensitive provider names by downcasing.

Parameters:

  • provider_name (String)

    The provider identifier

Returns:

  • (Hash, nil)

    The credential configuration or nil if provider not found



111
112
113
114
115
# File 'lib/fastlane/plugin/translate_gpt_release_notes/helper/credential_resolver.rb', line 111

def self.provider_config(provider_name)
  return nil if provider_name.nil?

  PROVIDER_CREDENTIALS[provider_name.to_s.downcase]
end

.resolve(provider_name, params = {}) ⇒ String?

Resolves the API key for a given provider following priority order:

  1. Direct parameter (e.g., params)

  2. Environment variables in order defined in PROVIDER_CREDENTIALS

  3. Legacy fallback for OpenAI (GPT_API_KEY) if defined in env_vars

Parameters:

  • provider_name (String)

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

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

    Hash of parameters that may contain API keys

Returns:

  • (String, nil)

    The resolved API key or nil if not found



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/fastlane/plugin/translate_gpt_release_notes/helper/credential_resolver.rb', line 42

def self.resolve(provider_name, params = {})
  config = provider_config(provider_name)
  return nil unless config

  # Priority 1: Check direct parameter
  param_value = params[config[:param_key]]
  return param_value.to_s.strip unless param_value.nil? || param_value.to_s.strip.empty?

  # Priority 2: Check environment variables in order
  config[:env_vars].each do |env_var|
    env_value = ENV[env_var]
    return env_value.to_s.strip unless env_value.nil? || env_value.to_s.strip.empty?
  end

  nil
end