module AwsCliConfigParser

Constants

VERSION

Public Class Methods

parse( aws_directory: '~/.aws', config_file_name: 'config', credentials_file_name: 'credentials', cli_cache_directory: './cli/cache', cached_credential_file_name_pattern: /\A\h{40}\.json\z/, now: lambda{ Time.now.utc } ) click to toggle source
# File lib/aws_cli_config_parser.rb, line 13
def self.parse(
  aws_directory: '~/.aws',
  config_file_name: 'config',
  credentials_file_name: 'credentials',
  cli_cache_directory: './cli/cache',
  cached_credential_file_name_pattern: /\A\h{40}\.json\z/,
  now: lambda{ Time.now.utc }
)
  aws_directory = Pathname(aws_directory).expand_path.realpath

  config_files = [
    aws_directory.join(config_file_name),
    aws_directory.join(credentials_file_name),
  ]
  .select{ |path| path.file? && path.readable_real? }

  cli_cache_directory = aws_directory.join(cli_cache_directory)

  cached_credential_files = if cli_cache_directory.directory? && cli_cache_directory.readable_real?
    cli_cache_directory
      .each_child
      .select{ |path| path.basename.to_s.match(cached_credential_file_name_pattern) }
      .select{ |path| path.file? && path.readable_real? }
  else
    []
  end

  parse_files(
    configs: config_files,
    cached_credentials: cached_credential_files,
    now: now,
  )
end
parse_files(configs: [], cached_credentials: [], now: lambda{ Time.now.utc }) click to toggle source
# File lib/aws_cli_config_parser.rb, line 47
def self.parse_files configs: [], cached_credentials: [], now: lambda{ Time.now.utc }
  configs
    .map(&Profiles.method(:from_io))
    .reduce(:merge!)
    &.merge_credentials!(
      cached_credentials
        .map(&CachedCredential.method(:from_io))
        .reject{ |credential| credential.expired?(now: now) }
    ) || []
end