Config-AWS

 view release on metacpan or  search on metacpan

META.json  view on Meta::CPAN

            "IO::Handle" : "0",
            "IPC::Open3" : "0",
            "Test::More" : "0",
            "Test::Pod" : "1.41"
         }
      },
      "runtime" : {
         "requires" : {
            "Exporter::Tiny" : "1",
            "Path::Tiny" : "0.076",
            "Ref::Util" : "0",
            "perl" : "5.010"
         }
      },
      "test" : {
         "recommends" : {
            "CPAN::Meta" : "2.120900"
         },
         "requires" : {
            "ExtUtils::MakeMaker" : "0",
            "File::Spec" : "0",

META.yml  view on Meta::CPAN

    - share
    - t
    - xt
provides:
  Config::AWS:
    file: lib/Config/AWS.pm
    version: '0.12'
requires:
  Exporter::Tiny: '1'
  Path::Tiny: '0.076'
  Ref::Util: '0'
  perl: '5.010'
resources:
  bugtracker: https://gitlab.com/jjatria/Config-AWS/issues
  repository: git://gitlab.com/jjatria/Config-AWS.git
version: '0.12'
x_Dist_Zilla:
  perl:
    version: '5.036000'
  plugins:
    -

lib/Config/AWS.pm  view on Meta::CPAN

package Config::AWS;
# ABSTRACT: Parse AWS config files

use strict;
use warnings;

use Carp ();
use Ref::Util;
use Scalar::Util;
use Exporter::Shiny qw(
    read
    read_all
    list_profiles
    read_file
    read_string
    read_handle
    config_file
    credentials_file

lib/Config/AWS.pm  view on Meta::CPAN


# Internal methods for parsing and validation

my $prepare = sub {
    # Input is given argument or credentials file (if exists) or config file.
    my $input = shift // do {
        my $cred_file = credentials_file();
        -r $cred_file ? $cred_file : config_file();
    };

    unless ( Ref::Util::is_ref $input ) {
        require Path::Tiny;
        my @lines = eval { Path::Tiny::path( $input )->lines };
        if ($@) {
            Carp::croak "Cannot read from $input: $@->{err}"
                if ref $@ && $@->isa('Path::Tiny::Error');
            Carp::croak $@;
        }
        return \@lines;
    }

    return [ $input->getlines ] if Scalar::Util::openhandle $input;

    if ( Ref::Util::is_blessed_ref $input ) {
        return [ $input->slurp ] if $input->isa('Path::Class::File');
        return [ $input->lines ] if $input->isa('Path::Tiny');

        Carp::croak 'Cannot read from objects of type ', ref $input;
    }

    return [ split /\R/, $$input ] if Ref::Util::is_scalarref $input;
    return $input                  if Ref::Util::is_arrayref  $input;

    Carp::croak "Could not use $input as source for ", (caller 1)[3];
};

my $read = sub {
    my ($lines, $target_profile) = @_;

    Carp::carp 'Reading config with only one line or less. Faulty input?'
        if @$lines <= 1;

lib/Config/AWS.pm  view on Meta::CPAN

}

sub config_file {
    $ENV{AWS_CONFIG_FILE} // ( glob '~/.aws/config' )[0];
}

# Methods for compatibility with Config::INI interface

sub read_file {
    Carp::croak 'Filename is missing' unless @_;
    Carp::croak 'Argument was not a string' if Ref::Util::is_ref $_[0];
    $read->( $prepare->(shift), @_ );
}

sub read_string {
    Carp::croak 'String is missing' unless @_;
    Carp::croak 'Argument was not a string' if Ref::Util::is_ref $_[0];
    $read->( [ split /\R/, shift // '' ], @_ );
}

sub read_handle {
    Carp::croak 'Handle is missing' unless @_;
    Carp::croak 'Argument was not a handle' unless Scalar::Util::openhandle $_[0];
    $read->( [ shift->getlines ], @_ );
}

1;

t/00-report-prereqs.dd  view on Meta::CPAN

                                      'IO::Handle' => '0',
                                      'IPC::Open3' => '0',
                                      'Test::More' => '0',
                                      'Test::Pod' => '1.41'
                                    }
                    },
       'runtime' => {
                      'requires' => {
                                      'Exporter::Tiny' => '1',
                                      'Path::Tiny' => '0.076',
                                      'Ref::Util' => '0',
                                      'perl' => '5.010'
                                    }
                    },
       'test' => {
                   'recommends' => {
                                     'CPAN::Meta' => '2.120900'
                                   },
                   'requires' => {
                                   'ExtUtils::MakeMaker' => '0',
                                   'File::Spec' => '0',

t/read.t  view on Meta::CPAN

use Test2::V0;
use Test2::Tools::Spec;

use Config::AWS;
use Path::Tiny qw( path tempdir );
use Ref::Util qw( is_globref );

my $DIR = tempdir 'ConfigAWS-XXXXXXXXX';

$DIR->child('config/.aws')->mkpath;
$DIR->child('credentials/.aws')->mkpath;

$DIR->child('config/.aws/config')->touch->spew(<<'CONFIG');
[alternate]
root_key = alternate root value
parent =



( run in 0.539 second using v1.01-cache-2.11-cpan-a5abf4f5562 )